Server Setup (Linux, Oracle Cloud)

This guide is written specifically for running a remote server on Linux with Java 17+, using the Oracle Cloud hosting service. For general information and other platforms, see Server Setup.

  • Latest Revision: February 2023, GTNH version 2.2.3.

Oracle Cloud is an attractive option as it offers a lot of space and processing power for no monthly fee. There are limitations; see Warnings, below. The general overview for a Linux server is to secure hosting. Get SSH access to the server. Set up an instance. Download the server files and Java 17+. Unzip the server pack and run startserver.sh. The instructions below are specific for Oracle Cloud but may help with generic Linux installs.

Warnings

  • In less than half a year, Oracle has changed the terms of the Always Free tier from 4 TPU cores and 24 GB ram to 3k OCPU hours and 18k GB RAM hours. They can change the rules again in the future. Be wary.
  • Your Oracle account will be terminated if you connect to the instance through VPN, so don't.
  • Backup your server periodically to a non-Oracle platform, so you don't suddenly discover that your account was terminated along with all data.

Introduction

This Linux setup uses an Oracle blogpost about how to set up a server on their platform.

You will need a debit/credit card on the signup step. Oracle will withdraw 1 Euro and put it back to check that the card is valid.

As of February 2023, you can have a free server with 4 OCPU cores, 24GB RAM, and 200 GB storage on the Oracle platform.

This setup was tested on the GTNH version 2.2.3.

The steps are as follows:

  1. Sign up for Oracle Cloud.
  2. Set up an instance.
  3. Set up a GTNH server.
  4. (Optional) Install a mod or software that backs up the server regularly.

The only hurdle during the signup step is that the debit/plastic card is mandatory. It also takes roughly a minute for the system to create your account.

You might encounter the "Out of capacity" error when you request an instance in some of the available regions. In that case if you really need an instance in this region, please try again after a while. Due to the popularity of the service, it can take up to two months until you are able to create an instance in this region.

Set Up an Instance

Create an Instance

This step is taken from the Oracle's manual, so check it out if you need more info. A concise version of it is given in this guide.

Go to "Create a VM instance". VM means Virtual Machine. This action should be in Quick Actions or in the dropdown menu that is on the upper left.

You will be presented with many fields. First is the server name. Choose whatever you see fit -- this name will not be shown anywhere on the GTNH server.

Compartment is just a way to organize machines, so you can leave it as it is.

Availability Domain can be left defaults too, however do mind that you can accidentally choose something that is not in the Always Free price tier if you change it.

The important part is the Image and Shape section. That's where you select what Operating System (OS) and hardware your server is going to use.

In Image, this guide suggests to use the Oracle Linux Cloud Developer image because it requires less actions to set up at the cost of taking more space. Alternatively, you can use the Oracle Linux image to reduce the bloat, but you will need to install Java 8 on it by yourself.

In Shape, select Ampere architecture. The current free tier allows 4 CPUs and 24GB RAM, so if you don't plan to host more servers, might as well use the full capacity that you are given (4 CPUs, 24 GB RAM). After you selected the Shape, check that you still have the Always Free Eligible tag near it. If you don't, you might have selected something wrong.

Next up is the Networking part. Select "Create new cloud network" and "Create new public subnet" if it's your first instance, or use the already-existing nets if not.

Also select "Assign a public IPv4 address". You will use this address to connect to the server.

Next is the SSH part. You can google how it works -- this guide will describe one of the options without getting into details. Select "Generate SSH key pair", then download the private key and save it -- you will need it every time you log into the instance.

Leave the Boot volume defaults and press Create. This will start the process of creating the instance.

You will see the yellow sign on the left that says "Provisioning". After a minute, it will change to green "Running". It means you can connect to the instance. Note the fields Username and Public IP Address -- you will need them.

Set Up Network Rules

When your Instance Details turns green and Running, click on the Subnet link in the Primary VNIC section. Then in Security Lists click on the only one that is there, the default one, then click on Add Ingress Rules.

You need to add two rules, one for each IP protocol. One for TCP, and one for UDP. Here's what you need to put in:

  • Stateless field unchecked.
  • Source type: CIDR.
  • Source CIDR: 0.0.0.0/0.
  • IP protocol: first rule TCP, second rule UDP.
  • Source port range: leave it empty.
  • Destination port range: 25565.

When you filled out the two rules, press Add Ingress Rules.

Tweak the Instance

In order to connect to the instance, you need a "shell" program. If you're on Windows, this guide suggests to install Git Bash for that.

When you launch Git Bash, use the following command to connect to the instance:

ssh opc@instance_IP -i path_to_SSH_key

A finished example can look like this:

ssh opc@144.24.170.229 -i ~/ssh-key-2022-09-07.key
  • ssh is the name of the command,
  • opc is the user name,
  • @ can be read as "at",
  • 144.24.170.229 is the IPv4 address of the instance,
  • -i is the flag that tells ssh to use a file as a password,
  • ~/ssh-key-2022-09-07.key is the path to the private key that you downloaded.

"~" is the shortcut to your user folder that is usually located at %userprofile% -> C:/Users/%Username%. It was given just as an example of how to circumvent the issues of linux-to-windows pathing in GitBash by placing your key somewhere in your user folder.

Okay, you connected to the instance, now what? The upside of the image Oracle Linux Cloud Developer that we chose during the installation is that we don't need to bother installing Java 8 because it's pre-installed -- we just need to choose it among other versions. Type in the following to start the choice:

sudo alternatives --config java

You will be given a list of numbers and names. Type in the number that corresponds to java-1.8.0-openjdk.aarch64.

There are 8 programs which provide 'java'.
  Selection    Command
-----------------------------------------------
   1           java-1.8.0-openjdk.aarch64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el8_5.aarch64/jre/bin/java)
   2           java-11-openjdk.aarch64 (/usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el8_5.aarch64/bin/java)
   3           /usr/java/jre1.8.0_311-aarch64/bin/java
   4           /usr/java/jdk1.8.0_311-aarch64/bin/java
*  5           /usr/java/jdk-17.0.1/bin/java
   6           /usr/java/jdk-11.0.13/bin/java
   7           /usr/lib64/graalvm/graalvm22-ee-java11/bin/java
 + 8           /usr/lib64/graalvm/graalvm22-ee-java17/bin/java

Enter to keep the current selection[+], or type selection number: 1

Other options that use Java 8 (also called 1.8.0) might work but they were not tested.

If you have chosen the bare Image at the installation step, you would use "yum list jdk*" to see available java versions and then install java1.8 which is the screen name of Java 8.

The next step is to tell the instance firewall to let the connections through:

sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp
sudo firewall-cmd --permanent --zone=public --add-port=25565/udp
sudo firewall-cmd --reload

Set up a GTNH Server

1. Download the server zip from here: http://downloads.gtnewhorizons.com/ServerPacks/

wget http://downloads.gtnewhorizons.com/ServerPacks/GT_New_Horizons_server_version_SERVER.zip

2. Check that you have unzip installed. Install it if you don't have it on the server.

yum list *unzip
3. Unzip the server into a folder
unzip server.zip -d destination

The complete command might be like:

unzip GTNH-1.7.10-2.1.2.3qf.zip -d ~/minecraft_server

4. In the server folder, agree to Minecraft End User License Agreement (EULA):

cd your_minecraft_server_folder
echo "eula=true" > eula.txt

You should have eula.txt in your server folder after the echo command.

And set execute permission on startserver.sh using chmod command:
chmod +x startserver.sh
5. Launch the server to test that things work:
bash startserver.sh

It will take several minutes to launch. The last line will likely be from [FML] about unloading world 1.

6. Whitelist yourself to get on the server:

whitelist add your_nick

so it will look like

whitelist add jonsnowwastaken

7. Connect to your server:

In client, use the same IPv4 that you used to connect through SSH and the port 25565 -- the default one for minecraft servers.

instance_IP:25565

8. Stop the server. We're not done with setting things up:

stop

After shutting down, it will begin the countdown to reboot, so press Ctrl+C to stop it completely.

Install a mod for backups

The recommended mod for backups is server utilities.

Below is an example of how the process can go. Check if it's the most recent version of the mods before proceeding.

It would be most convenient to download the mods directly through the wget command to the mods folder on the server. If wget fails, we can upload the mods to the server by scp.

Below are the examples of both ways. Please use the scp option only if the wget one fails:

  • Using wget (you can get the link by right-clicking on correct jar and choosing "Copy link adress" ):
    cd server_directory/mods
    wget https://github.com/GTNewHorizons/ServerUtilities/releases/download/2.0.11/ServerUtilities-2.0.11.jar
    
  • Using scp :
    scp -i path_to_private_SSH_key path_to_ServerUtils_on_your_computer opc@instance_ip:server_folder/mods/ServerUtilities_full_name.jar
    

A finished scp example might look like this:

scp -i ~/.ssh/ssh-key-2022-09-07.key ~/Downloads/ServerUtilities-2.0.11.jar opc@144.24.170.228:~/minecraft-server/mods/ServerUtilities-2.0.11.jar
  • scp is the command that stands for "secure copy",
  • -i is the flag that says to use the file to identify youself, like we did with ssh,
  • ~/.ssh/ssh-key-2022-09-07.key is the example of the path to the key, ~ is the shortcut for you user folder,
  • ~/Downloads/ServerUtilities-{version}.jar is the location of the mod jar on your computer,
  • opc@144.24.170.228:~/minecraft-server/mods/ServerUtilities-{version}.jar is the location of the resulting file on the server.

Now you can launch your server again to check if the backup works.

A backup should be visible in the log immediately after the server is done loading.

The default frequency of the backups is once every two hours. To make the backups more frequent, open the config file that is created after the server is launched for the first time with the backup mods. The following steps use vim as the default text editor to edit config.json , you may use other text editor such as nano . A more detailed description of config can be found at ServerUtilities.

cd your_instance/serverutilities/
vim serverutilities.cfg
  1. In vim, press / to go into search mode and type backups, then press ENTER.
  2. The backup settings are located at the top of the file in the "backups" section.
  3. press a to go into insert mode to change the value, press ESC to escape from insert mode when finished. Change the value after the key.
  4. backup_timer default is 2.0, If you want to make a backup every 30 minutes, change the value from 2.0 to 0.5.
  5. backups_to_keep Change to keep more backups. When the number reaches the specified maximum, the oldest backup is deleted.
  6. backup_folder_path specify the path of the backups. The default works too.
  7. To exit vim and save the changes, press : then type wq and press ENTER , wq which means Write and Quit.
  8. If you get an error on writing changes into the file, check the file permissions. Although if the error is about that you can't write into the file and that's your default user, that likely means that you launched the server as root before, which can lead to many complications later, so please don't launch a server as root.

After that, we come to the last step in this manual -- actually testing that the backup works:

  1. Stop the server.
  2. Locate the "backup/" folder: cd backup. By default it's in your server folder.
  3. Copy your world folder that is usually called "World/" to a place outside the server folder just in case the backup is broken. e.g cp World ~/ Copy to home folder.
  4. Delete your world folder in the server folder. e.g rm -ri world to delete world folder. Pay extra attention when running rm command !! There is NO recycle bin on Linux server.
  5. Unzip the backup in the place of a deleted folder.
  6. Launch the server again to see if the backup is fine.
It's suggested to keep your world folder named World to prevent further complications. You can use the mv command to rename a folder:
mv world World
To start a backup manually, send the following command when you're on the server:
/backup start

If you want to use a different mod for backups, like AromaBackup, please refer to the page Backups and Recovery.

Run the server

So, you can launch the server, but when you leave the ssh connection, the server closes. That happens because your ssh connection keeps things running.

To make the server run without you being connected to the ssh, one of the solutions is to use the "screen" command.

# Connect to the instance
ssh opc@instance_IP -i path_to_SSH_key

# Check that screen is installed
screen --version

# Initiate a screen
screen

# Start the server
cd server_folder
bash startserver.sh

To detach from the screen without terminating it, use Ctrl+A and then Ctrl+D.

To reattach to the screen, use

screen -r

There are more options that you can use with this command, such as multiple named screens. You can check this manual for the instructions. or run the command man screen.

Improvements

More space

It's very likely that 50GB will not be enough for a lategame server. You will need more storage space.

You can create an additional volume to attach to your instance.

Oracle gives 200GB for free, and the default instance takes 47GB, so it's safe to create a 150GB block-volume, as Oracle calls it.

In short, you will do the following:

  1. Create a 150GB block-volume. Use this manual. Make a 150GB volume instead of 50GB that is in the guide.
  2. Attach the block-volume to your instance on the site. Use the same manual.
  3. Attach the block-volume in the virtual machine. Use the same manual.
  4. Format the block-volume. This tutorial likely has the right information, but it is not certain. Please check it in other sources before applying.
  5. Mount the block-volume. Same as the step above -- the info was forgotten, so please check what is written in the manual.
  6. Either move the whole server to the new block-volume or move only backups. Better to move the whole server in order to reduce the chance of error.
  7. Optionally, you can make the block-volume to mount automatically when the instance launches. Use this manual. However, be very careful on this step. As written at the bottom of the manual, you can brick your instance if you make a mistake and would have to use the site-console to revert changes. However, the result is well worth it -- you won't have to remember how to mount a block-volume if you need to restart the instance.