Skip to content

Instantly share code, notes, and snippets.

@danielpclin
Forked from justincjahn/README.md
Last active June 8, 2022 13:53
Show Gist options
  • Save danielpclin/37e2b0acaf869ce7969cb8a5e19cd596 to your computer and use it in GitHub Desktop.
Save danielpclin/37e2b0acaf869ce7969cb8a5e19cd596 to your computer and use it in GitHub Desktop.
Minecraft server(s) using systemd and screen.

Install

# Install dependencies
sudo apt-get install -y wget apt-transport-https gnupg screen

wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /usr/share/keyrings/adoptium.asc
echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt-get update # update if you haven't already
sudo apt-get install temurin-17-jdk

# Create a new unprivileged user for minecraft
sudo useradd -r -m -d /opt/minecraft minecraft -s /bin/bash

# Create the directory that will house our minecraft instances
sudo su --shell /bin/bash minecraft
cd ~
mkdir instances
exit

# Copy the [email protected] file into the correct place.
sudo vi /etc/systemd/system/[email protected]

# Reload systemd units
sudo systemctl daemon-reload

# Put file minecraft in /etc/ufw/applications.d/minecraft
sudo ufw app update Minecraft
sudo ufw app info Minecraft
sudo ufw allow Minecraft
sudo ufw allow OpenSSH

# Connect to screen instance
sudo -u minecraft screen -r [mc-server] # (replace with mc-server_folder)

# View screen instances
sudo -u minecraft screen -ls

Provision a new server

# Sudo into the minecraft user's shell
sudo su --shell /bin/bash minecraft

# Move into the instances directory
cd instances

# Create a new folder to house your instance
mkdir server

# Install your minecraft instance, and make sure there is a minecraft_server.jar file.
# If you use Forge servers, you can use the following:
ln -s forge*.jar minecraft_server.jar

# Start and enable (start after boot) the server.
sudo systemctl start minecraft@server
sudo systemctl enable minecraft@server

# Stop server
sudo systemctl stop minecraft@server
[Minecraft]
title=Minecraft
description=Minecraft is a sandbox video game developed by Mojang Studios.
ports=25565/tcp
[Unit]
Description=Minecraft Server: %i
After=network.target
[Service]
WorkingDirectory=/opt/minecraft/instances/%i
User=minecraft
Group=minecraft
KillSignal=SIGCONT
Restart=always
ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx2G -jar minecraft_server.jar nogui
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"\015'
[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment