Setup Minecraft Server
Table of contents
Setup your VPS
I use Digital Ocean. Create project, droplet. Log into VPS as root using ssh. (should be using key)
$ ssh root@serverip
Add user
$ adduser user
Grant administrative privilege
$ usermod -aG sudo user
SSH
Change SSH port
$ vim /etc/ssh/sshd_config
Uncomment the #Port 22
line and change it to what port you want.
Copy the .ssh folder to your users home folder to be able to log in from that account:
$ rsync --archive --chown=user:user ~/.ssh /home/user
Now you can log out of root and log in using your new user.
Update
After successful login, update the system:
$ sudo apt update && sudo apt upgrade
Set Timezone
$ sudo timedatectl list-timezones
$ sudo timedatectl set-timezone TIMEZONE
Edit sshd config:
$ sudo vim /etc/ssh/sshd_config
Change PermitRootLogin yes
to no.
Probably a good idea to reboot at this point
$ sudo reboot
Firewall
Change firewall rules:
$ sudo ufw default deny incoming
$ sudo ufw allow SSHPORT
$ sudo ufw enable
Install logwatch
$ sudo apt install logwatch
Then edit config at /usr/share/logwatch/default.conf/logwatch.conf
and change Mailto = user
and Detail = High
.
Install Fail2ban
Install:
$ sudo apt get install fail2ban
Edit config:
$ cd /etc/fail2ban
$ sudo cp jail.conf jail.local
Replace the [sshd] section with this: (making sure to change the port for your ssh port)
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
mode = aggressive
enabled = true
port = SSHPORT
maxretry = 3
findtime = 300
bantime = 72h
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Start and enable fail2ban:
$ sudo systemctl start fail2ban
$ sudo systemctl enable fail2ban
Install Zsh and Oh My Zsh (optional, personal preference)
(This is just for my personal preference, its not needed…but I’m gonna document it for myself)
Check if you have git installed, if not download it.
$ sudo apt install git
Clone dotfiles
$ mkdir git
$ cd git
$ git clone https://github.com/unclassedpenguin/dotfiles.git
Use install script included in dotfiles.
$ ./install.sh
Then exit and log back in for changes to take effect.
I think thats it for setting up the vps… Now onto the minecraft server.
Setting up the Minecraft Server
Download Server
Create a minecraft folder
$ mkdir minecraft
$ cd minecraft
Now we need to download the minecraft server. This will change, depending on the version. Get the url from here. Right click on the download button for the ubuntu minecraft server and copy the url, and then use wget to download it.
$ wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.20.72.01.zip
Install unzip:
$ sudo apt install unzip
Unzip the folder:
$ unzip bedrock-server-yada-yada.zip
Setup to run
Create a start program:
$ touch start.sh
Edit the file and add these contents:
#!/bin/bash
LD_LIBRARY_PATH=. ./bedrock_server
sleep 10
Add execution permission to the file:
$ chmod +x start.sh
Edit server.properties, change at the least the name and the port.
We need to open the port in the firewall to be able to connect.
$ sudo ufw allow PORT
Make sure to change PORT to the port you had chosen in the server config file.
Test Server
At this point the server should be ready to run. You can test it by executing the start.sh
So, within the minecraft folder:
$ ./start.sh
Then, use minecraft on your phone to connect to the server.
After checking with your phone, use the command “stop” to shutdown the server.
I also like to change max players and enable the allow-list. Get your friends to connect before you turn on the allow-list, and then copy them into the allowlist.json. (Their name and xuid show up in the server feed when they connect to server)
[{"ignoresPlayerLimit":false,"name":"YourfriendsName","xuid":"8888888888888888"},{"ignoresPlayerLimit":false,"name": "AnotherFriend","xuid":"7777777777777777"}]
Setup automatic backups for the server
Now lets set it up so that the server will automatically backup every night. This will only make a local copy. You will need to manually download it every now and then to another system to have a secure backup incase your VPS has a problem.
First we need to create a couple of folders.
$ cd ~
$ mkdir -p backups/minecraft
Then we need to download a script:
$ cd backups
$ curl https://raw.githubusercontent.com/UnclassedPenguin/scripts/master/automcbu > automcbu
Make the script executable
$ chmod +x automcbu
Now we need to make sure the script will run everyday. We use cron to do that. To add a line to the crontab:
$ crontab -e
Add this to bottom of file that is opened:
SHELL=/bin/bash
# Backup minecraft server everyday at 4 AM
0 4 * * * bash /home/user/backups/automcbu
Make sure to edit user with your own username. This will run the backup every day at 4 am and store them in the backups/minecraft folder. The only things that are backed up are the worlds, the server config file and the allowlist.
For the backups to work, you have to use Screen.
Start a new screen session with the name “minecraft”:
$ screen -S minecraft
Now you can start the minecraft server:
$ cd minecraft
$ ./start.sh
To leave the screen session with it running in the background, use CTRL-a + d. This (d)isconnects you. To reconnect, if it is your only screen session, use screen -r
.
…
Is that really it? Perhaps…
Nope! What about updates?
Upgrading the Server
At some point your app will update and when you go to log in you will get an error message about the server being out of date.
Heres how to fix it :)
SSH to server.
Make sure you have a current backup! Run automcbu manually if you need to.
Screen into the minecraft screen session:
$ screen -r
Shutdown the server by typing stop
and enter.
Change directory to home folder:
$ cd
(If you’ve already done this before, you will have a old-minecraft, so delete it here.)
Delete old-minecraft:
$ rm -r old-minecraft
Move current minecraft folder to old-minecraft:
$ mv minecraft old-minecraft
Create a new minecraft folder:
$ mkdir minecraft
$ cd minecraft
Download the new server:
$ wget https://minecraft.azureedge.net/bin-linux/bedrock-server-0.00.00.00.zip
Unzip it:
$ unzip bedrock-server-0.00.00.00.zip
Change to home folder:
$ cd
Now we need to replace some files from the old server into the new server:
$ cp old-minecraft/allowlist.json minecraft/allowlist.json
$ cp old-minecraft/server.properties minecraft/server.properties
$ cp old-minecraft/start.sh minecraft/start.sh
$ cp -r old-minecraft/worlds minecraft/worlds
Then you should be good. Start your screen session again ($ screen -S minecraft
) and start the server with $ ./start.sh
. Check it from your phone, should be good to go!
Oh, op yourself again, if you need! in the server op playername
.
Make sure to check the server the next few days to make sure backups are still functioning properly.
And maybe now thats actually it…