Raspberry Pi Minecraft Server

A Raspberry Pi Minecraft server is a cost-effective way to have your very own private server with your friends or just for stuffing around on.

Raspberry Pi Minecraft

I have had mine running for quite some time now and haven’t come across too many problems. It is very important to know that this server will not be able to hold many people.

From my experience, anything over five people and the server will start to get a bit wonky. I found the optimal amount of people is only two to three, but this can be improved upon by tweaking the server.

We are also going to be using the spigot version of Minecraft as the default install didn’t work for me. I found that it will crash a lot, be laggy, and is very unstable. The official Java version may improve over time.

If you are looking for the Bedrock server, be sure to check out our Minecraft Bedrock server tutorial. It will take you through all the steps to setting it up correctly.

In this project, we will utilize Java, which should already be installed on Raspberry Pi OS. We will make a few changes to optimize the server for the Raspberry Pi 2, 3, 4, or 5. We will also set it up so you can access it on the web, and have it reboot if the Pi goes offline for any reason.

Equipment

Please find the equipment that I used for making this Raspberry Pi Minecraft server below.

Recommended

Optional

Video Tutorial

If you want to see how to set up the server, then check out my video below. Otherwise, I have a detailed text explanation immediately below the video.

If you like the video, please make sure you subscribe or follow us on social media, so you are kept up to date.

Setting up the Raspberry Pi Minecraft Server

Firstly, we must install an operating system onto the Raspberry Pi. If you haven’t already done this, check out our awesome guide on installing Raspberry Pi OS. It will take you through all the steps that you will need to do.

In this tutorial, we will work entirely in the terminal. It is probably best we boot straight into the terminal so we can save on resources by not loading the GUI.

1. First, update operating system packages to the latest version by entering the following commands.

sudo apt update
sudo apt upgrade

2. Now, we will need to make a couple of changes in the config tool. Let’s bring the tool up by entering the following line.

sudo raspi-config

If you need more information regarding the raspi-config tool, please check out our guide.

3. Also, it is unlikely you want to boot into the desktop, so ensure the boot option is set to the CLI (Command Line Interface). This change will help give the server as much processing power as possible.

To change the boot option, select 1 System Options, and select Boot / Auto Login.

Select Console or Console Autologin.

4. Finally, enable SSH so we can access the Pi remotely if required, unless you already have it enabled.

To enable SSH, go to Interface Options. Next, Select I1 SSH. Lastly, answer <YES> to enable the SSH server.

5. Now go to <Finish> on the main screen and answer <YES> to the reboot question.

6. We will now want the IP address of our Pi for when we try to connect to our server. To get the Raspberry Pi IP address, enter the hostname command.

sudo hostname -I

To ensure the IP doesn’t change, you should set up setup a static IP address on the Raspberry Pi and your router.

7. Next, we need to make sure that Git is installed. Otherwise, we will not be able to build the server.

Enter the following command to install the Git software.

sudo apt install git

8. By default, Java (17) should already be available on Raspberry Pi OS (Bookworm). However, if you wish to use the latest version of the Minecraft server, you will need to use a newer version than what is available.

To install a version of Java compatible with Minecraft 1.20.6 + (Java 21 or 22), please follow our installing Java guide.

9. Now, we will need the Minecraft server file, which we will create using a builder tool that Spigot supplies.

To get the tools, enter the following commands.

mkdir ~/minecraft
cd ~/minecraft
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

10. Now we will want to run the build tools file, so it creates our Spigot server. It will take about 15 minutes to finish.

Change --rev latest at the end of the command to get a different version. Don’t forget to change latest in the command to the version number you wish to download. For example, --rev 1.20.6 will download version 1.20.6.

java -Xmx1024M -jar BuildTools.jar --rev latest

Important: If you have a Raspberry Pi B+, B, or any variation before the Raspberry Pi 2, the build tools will likely fail. You will need to generate the spigot.jar on a more powerful computer instead.

11. To ensure the Spigot server successfully downloaded and saved, simply type ls. You should see spigot-1.20.6.jar. The filename may be different depending on the version you downloaded.

ls

Make sure you remain in the ~/minecraft folder as we want all the server files to be created in here. If you start the server in a different folder, it will create the files there.

12. Now we are ready to launch the server. To do this, enter the following command. You may need to change the version number depending on what version you’re using e.g. spigot-1.20.6.jar.

Raspberry Pi 1

java -Xms256M -Xmx496M -jar ~/minecraft/spigot-1.20.6.jar nogui

Raspberry Pi 2, 3, 4, or 5

java -Xms512M -Xmx1008M -jar ~/minecraft/spigot-1.20.6.jar nogui

With the 2GB and 4GB variants of the Raspberry Pi 4 or 5, you can increase the Xmx value even higher.

The server will stop straight away as we will need to agree to the Eula. You can do this by opening the Eula by typing the following command.

nano eula.txt

13. In here, change false to TRUE. Once done, save and exit by pressing CTRL + X, then Y.

14. Now relaunch the server. It will take a while to create a map, so give it about three to five minutes. If you ever reboot again, it will only take thirty seconds to load if the map has already been created.

15. The server should be running and accessible over the local network.

16. You might want to mod your user now so that you can use all the server commands when you log in. If we have it auto-boot on startup, accessing the server backend is slightly more difficult.

To mod your user, simply run the following command when the server has launched (Replacing username with your username).

op username

17. The Minecraft server on the Raspberry Pi will now be up and running fine, but you may want to do some optimizations to the server to make it run even better.

Raspberry Pi Minecraft Server

Connecting to the Minecraft Server

If you are on a local network, it should be pretty easy to connect to the Minecraft server running on the Raspberry Pi. To test it out, follow the steps below.

1. Load the Minecraft Java client on a computer within the same local network as the Pi. Ensure the version of the client matches the version of the server.

2. Go to multiplayer, and your server might appear in the local list. If it doesn’t, simply go to direct connect and enter the IP address we got earlier on the Pi using the hostname command.

hostname -I

3. If you want to allow access to the Minecraft server via the internet, you will need to set up port forwarding.

Assuming you want to learn how to do this, head over to my guide on setting up Raspberry Pi port forwarding. You will need to port forward the port 25565 (unless you change it in the server properties) to the IP of your Pi.

Configuring the Server

Here are a few tips for configuring the server and getting it up and running.

Optimizing the Minecraft Server

To get the most out of our Minecraft server on the Raspberry Pi, you can install a plugin to help optimize the performance.

There are many plugins that can help with performance or extend the server’s functionality. Simply use the wget command to download them to the Pi. Below is an example.

cd ~/minecraft/plugins
wget -O example.jar <example_plugin_url>

Editing the Minecraft Properties

You will probably want to know how to edit the server properties. This ability to edit is very important for optimizing the server and customizing it to how you want the server to be.

If you want more information for each of the server settings, you can find a good page on all the server properties here.

To enter the server properties, enter the following line.

sudo nano ~/minecraft/server.properties

Now, we will want to change a few settings to help optimize the performance of the server.

You can change these and other settings to whatever you like however you want, but keep in mind the Pi can’t handle too much processing.

view-distance=04
max-player=5

Boot on Startup

To have the server start on boot, we will need to do a few extra steps.

1. We will need to create a service for the Minecraft server so let’s start writing the service file by entering the command below.

sudo nano /lib/systemd/system/minecraftserver.service

2. In this file you will need to enter the following text.

This file defines the service, so the service manager knows how and what to run. Don’t forget to update the spigot version number whenever you upgrade.

Update <USER> with the username you plan on using to run the server. You can see the username of your user by entering the whoami command into the terminal.

[Unit]
Description=Minecraft Spigot Server

[Service]
User=<USER>
Group=<USER>
Restart=on-abort
WorkingDirectory=/home/<USER>/minecraft/
ExecStart=/usr/bin/java -Xms512M -Xmx1008M -jar /home/<USER>/minecraft/spigot-1.20.6.jar nogui

[Install]
WantedBy=multi-user.target

Once done, save the file by pressing CTRL + X then Y followed by ENTER.

3. Now, we will need to enable the service. You can enable the service by running the command below.

sudo systemctl enable minecraftserver.service

4. You should now be able to start the Minecraft server by simply using the following command.

sudo systemctl start minecraftserver.service

5. Using a similar command, you can check on the status of the service. Checking the status is great for debugging.

sudo systemctl status minecraftserver.service

5. You can stop the server by using the following command.

sudo systemctl stop minecraftserver.service

Your server should now start on boot. You can test it by restarting the Raspberry Pi. It will take a few minutes to startup.

sudo reboot

If you want to get access to the server on the command line, then you will need to shut down the server and load it using the normal command.

Conclusion

I hope this tutorial has helped you in setting up a stable version of a Raspberry Pi Minecraft server. If you like this tutorial, then be sure to check out our many other Raspberry Pi Projects.

Also, feel free to drop us a comment below if you have better optimization settings, plugins, or ideas. If you’re having trouble, let us know below.

Leave a Reply

Your email address will not be published. Required fields are marked *

296 Comments

  1. Avatar for JC
    JC on

    Is there any word on getting a prebuilt spigot 1.8.9 jar out?

  2. Avatar for Kevin
    Kevin on

    Hi guys the server works nearly perfect, so my problem is when I go into the nether the server crashes. I already tried to delete the worl_nether folder but nothing worked. It always ends with the error java.net.connectexception: Connection refused: no further information:
    Please I need help.

  3. Avatar for darren
    darren on

    Thanks for this, it looks really useful.

    I just set up the Mojang Minecraft server on my Pi2, per the Idiot’s Guide to Raspberry Pi and it’s awful – constantly crashing and extremely slow. So it seems I should try a different server, but I have some Qs (Dec 2015 as I write this):

    1. is Spigot still subject to legal wranglings? What other servers would run on RasPi (canarymod, bukkit (spigot is an offshoot of bukkit, no?), etc)?

    2. I tried overclocking my Pi2 to Turbo and it failed miserably. I’m now at the overclock setting “Pi2” (1000, 500, 500, 2v) – presumably this is the best setting, given that I’m running a Pi2?

    3. does -Xms256M -Xmx1024M seem like reasonable settings for the server start command?

    4. I’ve tried in vain to connect an Android phone and an iPad running MCPE to the server but they fail, whereas my Mac desktop MC client connects fine – should they be able to connect ok or will most servers need special settings to support MCPE clients? Or do I need a specific server?

    Thanks for your help.

    1. Avatar for darren
      darren on

      Replying to my own comment: I saw that you stated Xms and Xmx in your text, 512 and 1008 – that’s what I’m currently using.

      I was previously using crontab to start the server on boot but it didn’t work. Your solution seems better. One thing though: sudo ps -aux | grep “minecraft-start.sh”, won’t this just tell us if the shell script is running, but if the server itself has crashed underneath the script could still be running (I believe I’ve seen that). sudo ps -aux | grep “minecraft” will show everything (i.e. four processes: the sudo java… ; the java… ; the shell script; and the ps -aux cmd itself).

    2. Avatar for Steven Elemen
      Steven Elemen on

      Did you ever find a way to connect MCPE on iOS (iPad or iPod)? Both of my kids have MC on their PCs and can connect to the RPi with no issues, but it would be nice to be able to connect with our iPads as well so I could play too or when their friends come over.

    3. Avatar for darren
      darren on

      I installed PocketMine but the problem is it only supported an older version of MCPE than the current release (I’m on Android v0.13.1 alpha) and I think PocketMine was supporting v0.10x or something like that. (I’m not that bothered to even look into rolling back my MCPE, if indeed that’s possible).

      It was several weeks ago and I haven’t checked back since. I would’ve thought Mojang would release an MCPE server sometime but who knows.

  4. Avatar for DeWet
    DeWet on

    So, i did everything and my server works, but when I try to access server properties, I come up with a blank screen with no text besides the date and such at the top. Any help?

  5. Avatar for Hammerface
    Hammerface on

    After a minute of logging on to the server, it crashes display in 3 pages of error messages. The server also only works if the pi has rebooted just before it starts.
    I think it is to do with Java but as I’m new to this I don’t know exactly. It doesn’t crash if nobody joins though. The only plugin I have is Clearlag, I’m running spigot 1.8.8 and Java version 1.8.0_72. People who are trying to join are running Minecraft 1.8.9 Thanks!

  6. Avatar for Matt
    Matt on

    I’m getting weird issues with port forwarding. I set up a port forwarding rule on my router that forwarded to TCP destination port 25565 and UDP destination port 25565 but it only works with UDP 25565. I am trying to set it up to let me access it from outside my network. Any idea why the TCP port won’t work?

  7. Avatar for hectorcampus
    hectorcampus on

    Thx so much Gus,your guide help me to install minecraft in orange pi (clone of Taspberry), I have another problems but finally i make it.

    With your permission,i make another guide exclusive for orange pi.I will mention your guide in the credits.

    1. Avatar for Gus
      Gus on
      Editor

      Go for it! 🙂

  8. Avatar for StingCRO
    StingCRO on

    I have done everything as said.
    Did the raspberry pi forwarding and my friend still cant connect to the server.
    I can connect locally but not over wan IP.

    If you need further information just tell me.

  9. Avatar for Ricardo
    Ricardo on

    After restarting my server the next day it recreated the whole world instead of using the one the day before. The command I ran to shutdown was sudo shutdown now and to run the server the next day I used the same command as in the tutorial.

  10. Avatar for Tom
    Tom on

    After doing Step 11. I get:

    gzip: stdin: not in gzip format
    tar: Child returned status 1
    tar: Error is not recoverable: exiting now

    on my raspberry pi.
    I’ve been googling for hours straight now and I can’t find something to work. Please help me 😉
    If you need any more information about my device or settings; tell me precisely what to do please!

  11. Avatar for Leon
    Leon on

    I tried this on a first issue RP model-B (the one with 256mb of memory), but it was way too slow and disconnects after a short amount of time.

    Trying to overclock that model to turbo caused it to crash on startup so I had to keep it to moderate overclocking.

    However, I’m going to try this on an old eeepc-701-4G, with debian. The process is almost the same — instead using http://www.webupd8.org/2014/03/oracle-java-8-stable-released-install.html for the java install and updates.

    I’m just waiting for the 2GB memory module to arrive from China.

  12. Avatar for Nik
    Nik on

    Hi, thanks for this awesome tutorial! Worked really fine, but wehre can I get the OP rights?! Within a normal server, there´s the console, but the pi dind´t got a console for something like that, didn´t it? Could you tell me, wehre I have to do the settings to get OP on the server?!
    Thanks from Germany Nik

  13. Avatar for Peter Wong
    Peter Wong on

    Dear Gus,

    You have made a perfect tutorial to generate the new raspberry pi 2 and new bukkit jar file 1.8.8. My son is so happy now, we are playing day and night! XD

    I have manage to use “screen” and auto startup script to boot up my minecraft server.
    I used this tutorial to get it done!

    https://coderwall.com/p/quflrg/run-a-script-on-startup-in-a-detached-screen-on-a-raspberry-pi

    for the one who could not figured out yet.

    Happy crafting!!!

    regards,
    Peter

    1. Avatar for Jeff
      Jeff on

      Curious what command you used, in the /etc/rc.local file I’m using:

      cd /home/minecraft && screen -dmS minecraft /opt/jdk1.8.0_60/bin/java -Xms512M -Xmx1008M -jar /home/minecraft1_9/spigot-1.9.jar nogui

  14. Avatar for Leon
    Leon on

    The latest RaspianOS has java jdk8 pre-installed so no need to call java from /opt…

    1. Avatar for Gus
      Gus on
      Editor

      Thanks Leon! I have updated the tutorial with a couple of notes so people will be aware of this.

    2. Avatar for Jonathan
      Jonathan on

      Thanks Leon and Gus!

      How do I update to Java 8?

    3. Avatar for Jonathan
      Jonathan on

      Well, It already comes with Java 8 so I just found out but…
      I can’t use this command:
      sudo /opt/jdk1.8.0_60/bin/java -jar filename.jar

      It says that is doesn’t recognise the command.
      Thanks Leon!

    4. Avatar for Gus
      Gus on
      Editor

      Just use sudo java -jar filename.jar

  15. Avatar for Lorenz
    Lorenz on

    Thank you for this guide. Easy to set up and works well.
    Only problem i have is once I’ve booted and the server is running no commands i type are working.
    Not even sudo commands work.
    I can type anything but it just doesn’t do anything. I can’t get back to the config file or to the gui.
    Any suggestions?

    1. Avatar for Ole
      Ole on

      I have the same Problem. Everytime i boot my raspberry pi b+ the Server starts automatically and then i can’t even stop the Server. Can somebody help me?

    2. Avatar for Dan Hendrix
      Dan Hendrix on

      Same thing here. I can type, but get no response to anything except Ctrl+alt+del, which reboots and it returns to the same state.

    3. Avatar for Jonas
      Jonas on

      I’ve got the same problem, maybe the autostart line should be done with nohup?
      I ended up reinstalling the whole thing. Only because I didn’t have any other linux machines with a spare sd card reader. Otherwise you could mount up the card in another linux box and change back the rc.local file.

    4. Avatar for Chris
      Chris on

      I got the same problem. I also ended up reinstalling my whole device. at least now I might install some kind of safety button if I do sth stupid again 😀

    5. Avatar for JJ
      JJ on

      I am having the same problem.

      I guess I should have added a ‘&’ to run the server in the background. I do not know but maybe that would have helped.

    6. Avatar for Kevin
      Kevin on

      I have this issue as well. I was hoping someone would post a solution though. Any ideas?

  16. Avatar for Jonathan
    Jonathan on

    Hey Gus! Thank you heaps for this tutorial, I got my server working… But :\
    I’m using a Model B and I followed all of the lines. But its slow as ever, just wondering if I should install a new version of java? I tried to install this one:
    http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-arm32-vfp-hflt.tar.gz?AuthParam=1445905057_620fbf309d330bb0cfa0e10b54a1a809
    but then I tried the code to unzip it:
    sudo tar zxvf jdk-8u65-linux-arm32-vfp-hflt.tar.gz -C /opt
    but it didnt work… Please help!

  17. Avatar for Nate F
    Nate F on

    I forwarded the port to the pi, but no luck. Would the problem be with having two routers?

  18. Avatar for Nate F
    Nate F on

    Could someone please tell me how players outside my local network can connect to the server? And by the way, great tutorial, first one that’s worked very smoothly.

    1. Avatar for Gus
      Gus on
      Editor

      Hi Nate, This can really vary since it depends on your internet connection speed etc. However I would say the Raspberry Pi probably will struggle with more than just a few players. Roughly I would say 5 but I haven’t been able to test this.

    2. Avatar for Nate F
      Nate F on

      I was wondering about dynamic DNS and that link above really helped, but it didn’t help with other people connecting to the MC server. Would someone have to enter (my routers’s ip):25565 when adding a server in Minecraft? After I forwarded port 25565 to the Pi’s local IP (the 192.168.1.xxx)? Sorry, I’m kinda new at this.

    3. Avatar for Gus
      Gus on
      Editor

      Hi Nate,

      Yes that is correct once you have setup port forwarding anyone not on your local network will need to connect via your external IP.(If you’re not sure what your external IP is just google “My IP” and it should let you know what it is) It should look something like xx.xxx.xxx.xxx:25565 when someone enters it.

    4. Avatar for wizdude
      wizdude on

      If you need some specific router instructions, http://www.portforward.com/ has some great step by step instructions for many common devices.

  19. Avatar for Scott
    Scott on

    I loved this walk-through. Could you possibly make one for PocketMine Server. My kids are addicted.

  20. Avatar for Dave
    Dave on

    Thanx for this great guide! All seems to be working, but when I try to connect MC to the server I get the following error:

    java.net.ConnectException: Connection refused

    This is local, I haven’t tried it yet from the outside.

    1. Avatar for TLF
      TLF on

      I’m getting this too. It’s usually as a result of the server version and client version not matching. But as I downloaded my client from the official site I’m not sure about how to fix it.

    2. Avatar for Ludwig
      Ludwig on

      Same problem here, “Connection refused”. How can I fix that?
      Thanks! Ludwig.

    3. Avatar for Caleb McPherson
      Caleb McPherson on

      More likely than not, you haven’t put the EULA as true, which is a trouble I had