Quick Links

We've shown you how to run your own blocktastic personal Minecraft server on a Windows/OSX box, but what if you crave something lighter weight, more energy efficient, and always ready for your friends? Read on as we turn a tiny Raspberry Pi machine into a low-cost Minecraft server you can leave on 24/7 for around a penny a day.

Why Do I Want to Do This?

There are two aspects to this tutorial: running your own Minecraft server and specifically running that Minecraft server on a Raspberry Pi. Why would you want to run your own Minecraft server? It's a really great way to extend and build upon the Minecraft play experience. You can leave the server running when you're not playing so friends and family can join and continue building your world. You can mess around with game variables and introduce mods in a way that isn't possible when you're playing the stand-alone game. It also gives you the kind of control over your multiplayer experience that using public servers doesn't, without incurring the cost of hosting a private server on a remote host.

While running a Minecraft server on its own is appealing enough to a dedicated Minecraft fan, running it on the Raspberry Pi is even more appealing. The tiny little Pi uses so few resources that you can leave your Minecraft server running 24/7 for a couple bucks a year. Aside from the initial cost outlay of the Pi, an SD card, and a little bit of time setting it up, you'll have an always-on Minecraft server at a monthly cost of around one gumball.

What Do I Need?

For this tutorial, you'll need a mix of hardware and software tools; aside from the actual Raspberry Pi and SD card, everything is free.

  • 1 Raspberry Pi (preferably a 512MB model)
  • 1 4GB+ SD card

This tutorial assumes that you have already familiarized yourself with the Raspberry Pi and have installed a copy of the Debian-derivative Raspbian on the device. If you have not gotten your Pi up and running yet, don't worry! Check out our guide, The HTG Guide to Getting Started with Raspberry Pi, to get up to speed.

Optimizing Raspbian for the Minecraft Server

Unlike other builds we've shared where you can layer multiple projects over one another (e.g. the Pi is more than powerful enough to serve as a weather/email indicator and a Google Cloud Print server at the same time), running a Minecraft server is a pretty intense operation for the little Pi and we'd strongly recommend dedicating the entire Pi to the process. Minecraft seems like a simple game, with all its blocky-ness and what not, but it's actually a pretty complex game beneath the simple skin and required a lot of processing power.

As such, we're going to tweak the configuration file and other settings to optimize Rasbian for the job. The first thing you'll need to do is dig into the Raspi-Config application to make a few minor changes. If you're installing Raspbian fresh, wait for the last step (which is the Raspi-Config), if you already installed it, head to the terminal and type in "sudo raspi-config" to launch it again.

One of the first and most important things we need to attend to is cranking up the overclock setting. We need all the power we can get to make our Minecraft experience enjoyable. In Raspi-Config, select option number 7 "Overclock".

Be prepared for some stern warnings about overclocking, but rest easy knowing that overclocking is directly supported by the Raspberry Pi foundation and has been included in the configuration options since late 2012. Once you're in the actual selection screen, select "Turbo 1000MhHz". Again, you'll be warned that the degree of overclocking you've selected carries risks (specifically, potential corruption of the SD card, but no risk of actual hardware damage). Click OK and wait for the device to reset.

Next, make sure you're set to boot to the command prompt, not the desktop. Select number 3 "Enable Boot to Desktop/Scratch"  and make sure "Console Text console" is selected.

Back at the Raspi-Config menu, select number 8 "Advanced Options'. There are two critical changes we need to make in here and one optional change. First, the critical changes. Select A3 "Memory Split".

Change the amount of memory available to the GPU to 16MB (down from the default 64MB). Our Minecraft server is going to run in a GUI-less environment; there's no reason to allocate any more than the bare minimum to the GPU.

After selecting the GPU memory, you'll be returned to the main menu. Select "Advanced Options" again and then select A4 "SSH". Within the sub-menu, enable SSH. There is very little reason to keep this Pi connected to a monitor and keyboard, and by enabling SSH we can remotely access the machine from anywhere on the network.

Finally (and optionally), return again to the "Advanced Options" menu and select A2 "Hostname". Here you can change your hostname from "raspberrypi" to a more fitting Minecraft name. We opted for the highly creative hostname "minecraft", but feel free to spice it up a bit with whatever you feel like: creepertown, minecraft4life, or miner-box are all great minecraft server names.

That's it for the Raspbian configuration. Tab down to the bottom of the main screen and select "Finish" to reboot. After rebooting, you can now SSH into your terminal, or continue working from the keyboard hooked up to your Pi (we strongly recommend switching over to SSH as it allows you to easily cut and paste the commands). If you've never used SSH before, check out how to use PuTTY with your Pi here.

Installing Java on the Pi

The Minecraft server runs on Java, so the first thing we need to do on our freshly configured Pi is install it. Log into your Pi via SSH and then, at the command prompt, enter the following command to make a directory for the installation:

        sudo mkdir /java/
    

Now we need to download the newest version of Java. At the time of this publication, the newest release is the OCT 2013 update and the link/filename we use will reflect that. Please check for a more current version of the Linux ARMv6/7 Java release on the Java download page and update the link/filename accordingly when following our instructions.

At the command prompt, enter the following command:

        sudo wget --no-check-certificate http://www.java.net/download/jdk8/archive/b111/binaries/jdk-8-ea-b111-linux-arm-vfp-hflt-09_oct_2013.tar.gz
    

Once the download has finished successfully, enter the following command:

        sudo tar zxvf jdk-8-ea-b111-linux-arm-vfp-hflt-09_oct_2013.tar.gz -C /opt/
    

Fun fact: the /opt/ directory name scheme is a remnant of early Unix design wherein the /opt/ directory was for "optional" software installed after the main operating system; it was the /Program Files/ of the Unix world.

After the file has finished extracting, enter:

        sudo /opt/jdk1.8.0/bin/java -version
    

This command will return the version number of your new Java installation like so:

        java version "1.8.0-ea"
    
        Java(TM) SE Runtime Environment (build 1.8.0-ea-b111)
    
        Java HotSpot(TM) Client VM (build 25.0-b53, mixed mode)
    

If you don't see the above printout (or a variation thereof if you're using a newer version of Java), try to extract the archive again. If you do see the readout, enter the following command to tidy up after yourself:

        sudo rm jdk-8-ea-b111-linux-arm-vfp-hflt-09_oct_2013.tar.gz
    

At this point Java is installed and we're ready to move onto installing our Minecraft server!

Installing and Configuring the Minecraft Server

Now that we have a foundation for our Minecraft server, it's time to install the parts that matter. We'll be using SpigotMC, a lightweight and stable Minecraft server build that works wonderfully on the Pi.

First, grab a copy of the the code with the following command:

        sudo wget http://ci.md-5.net/job/Spigot/lastSuccessfulBuild/artifact/Spigot-Server/target/spigot.jar
    

This link should remain stable over time, as it points directly to the most current stable release of Spigot, but if you have any issues you can always reference the SpigotMC download page here.

After the download finishes successfully, enter the following command:

        sudo /opt/jdk1.8.0/bin/java -Xms256M -Xmx496M -jar /home/pi/spigot.jar nogui
    

Note: if you're running the command on a 256MB Pi change the 256 and 496 in the above command to 128 and 256, respectively.

Your server will launch and a flurry of on-screen activity will follow. Be prepared to wait around 3-6 minutes or so for the process of setting up the server and generating the map to finish. Future startups will take much less time, around 20-30 seconds.

Note: If at any point during the configuration or play process things get really weird (e.g. your new Minecraft server freaks out and starts spawning you in the Nether and killing you instantly), use the "stop" command at the command prompt to gracefully shutdown the server so you can restart and troubleshoot it.

After the process has finished, head over to the computer you normally play Minecraft on, fire it up, and click on Multiplayer. You should see your server:

If your world doesn't pop up immediately during the network scan, hit the Add button and manually enter the address of your Pi.

Once you connect to the server, you'll see the status change in the server status window:

According to the server, we're in game. According to the actual Minecraft app, we're also in game, but it's the middle of the night in survival mode:

Boo! Spawning in the dead of night, weaponless and without shelter is no way to start things. No worries though, we need to do some more configuration; no time to sit around and get shot at by skeletons. Besides, if you try and play it without some configuration tweaks first, you'll likely find it quite unstable. We're just here to confirm the server is up, running, and accepting incoming connections.

Once we've confirmed the server is running and connectable (albeit not very playable yet), it's time to shut down the server. Via the server console, enter the command "stop" to shut everything down.

When you're returned to the command prompt, enter the following command:

        sudo nano server.properties
    

When the configuration file opens up, make the following changes (or just cut and paste our config file minus the first two lines with the name and date stamp):

        #Minecraft server properties
#Thu Oct 17 22:53:51 UTC 2013
generator-settings=
#Default is true, toggle to false
allow-nether=false
level-name=world
enable-query=false
allow-flight=false
server-port=25565
level-type=DEFAULT
enable-rcon=false
force-gamemode=false
level-seed=
server-ip=
max-build-height=256
spawn-npcs=true
white-list=false
spawn-animals=true
texture-pack=
snooper-enabled=true
hardcore=false
online-mode=true
pvp=true
difficulty=1
player-idle-timeout=0
gamemode=0
#Default 20; you only need to lower this if you're running
#a public server and worried about loads.
max-players=20
spawn-monsters=true
#Default is 10, 3-5 ideal for Pi
view-distance=5
generate-structures=true
spawn-protection=16
motd=A Minecraft Server

In the server status window, seen through your SSH connection to the pi, enter the following command to give yourself operator status on your Minecraft server (so that you can use more powerful commands in game, without always returning to the server status window).

        op [your minecraft nickname]
    

At this point things are looking better, but we still have a little tweaking to do before the server is really enjoyable. To that end, let's install some plugins.

The first plugin, and the one you should install above all others, is NoSpawnChunks. To install the plugin, first visit the NoSpawnChunks webpage and grab the download link for the most current version. As of this writing the current release is v0.3.

Back at the command prompt (the command prompt of your Pi, not the server console--if your server is still active, shut it down) enter the following commands:

        cd /home/pi/plugins
    
        sudo wget http://dev.bukkit.org/media/files/586/974/NoSpawnChunks.jar
    

Next, visit the ClearLag plugin page, and grab the latest link (as of this tutorial, it's v2.6.0). Enter the following at the command prompt:

        sudo wget http://dev.bukkit.org/media/files/743/213/Clearlag.jar
    

Because the files aren't compressed in a .ZIP or similar container, that's all there is to it: the plugins are parked in the plugin directory. (Remember this for future plugin downloads, the file needs to be whateverplugin.jar, so if it's compressed you need to uncompress it in the plugin directory.)

Resart the server:

        sudo /opt/jdk1.8.0/bin/java -Xms256M -Xmx496M -jar /home/pi/spigot.jar nogui
    

Be prepared for a slightly longer startup time (closer to the 3-6 minutes and much longer than the 30 seconds you just experienced) as the plugins affect the world map and need a minute to massage everything. After the spawn process finishes, type the following at the server console:

        plugins
    

This lists all the plugins currently active on the server. You should see something like this:

If the plugins aren't loaded, you may need to stop and restart the server.

After confirming your plugins are loaded, go ahead and join the game. You should notice significantly snappier play. In addition, you'll get occasional messages from the plugins indicating they are active, as seen below:

At this point Java is installed, the server is installed, and we've tweaked our settings for for the Pi.  It's time to start building with friends!

Note: a web site on the internet covered some of the steps for installing Java and Spigot before us, and it is possible that we used that article for reference and forgot to link it. If you want to read that article, you can do so by clicking on this link.