Skip to content

Instantly share code, notes, and snippets.

@Daethyra
Created May 11, 2026 00:01
Show Gist options
  • Select an option

  • Save Daethyra/db627c0a08465d5604db8ea3be21aed7 to your computer and use it in GitHub Desktop.

Select an option

Save Daethyra/db627c0a08465d5604db8ea3be21aed7 to your computer and use it in GitHub Desktop.
Automatically install the Forge version of Minecraft & its dependencies, then create a service to auto-run Minecraft on startup on an Amazon EC2 instance.
#!/bin/bash
set -e # Exit immediately if any command fails
# configuration
FORGE_VERSION="1.20.1-47.4.20"
INSTALLER_URL="https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}-installer.jar"
SERVER_DIR="/opt/minecraft/server"
MEMORY_ARGS="-Xmx12G -Xms12G" # Adjust if needed
# install java 21
sudo yum install -y java-21-amazon-corretto-headless
# create unprivileged system user
# Using useradd with -r (system) and -M (no home directory) – more portable than 'adduser --system'
sudo useradd -r -M minecraft
# prepare server dir
sudo mkdir -p "$SERVER_DIR"
cd "$SERVER_DIR"
# download forge installer
sudo wget -O forge-installer.jar "$INSTALLER_URL"
# run installer in headless mode
# This creates run.sh, user_jvm_args.txt, libraries/, and the server jar
sudo java -jar forge-installer.jar --installServer
sudo rm forge-installer.jar
# accept EULA
echo "eula=true" | sudo tee eula.txt > /dev/null
# create java memory config file
# run.sh reads user_jvm_args.txt and appends its content to the java command
echo "$MEMORY_ARGS" | sudo tee user_jvm_args.txt > /dev/null
# wrapper start script that calls official run.sh just for the sake of following the original tutorial
sudo tee start > /dev/null << 'EOF'
#!/bin/bash
cd /opt/minecraft/server
exec bash run.sh
EOF
sudo chmod +x start
# ensure run.sh is executable
sudo chmod +x run.sh
# set ownership of everything to minecraft user
# if you install any mod packs, make sure all create files are owned by the `minecraft` user
sudo chown -R minecraft:minecraft "$SERVER_DIR"
# install autostart service
sudo tee /etc/systemd/system/minecraft.service > /dev/null << 'UNIT'
[Unit]
Description=Minecraft Forge Server
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/opt/minecraft/server/start
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
UNIT
# enable/start the service
sudo systemctl daemon-reload
sudo systemctl enable minecraft.service
sudo systemctl start minecraft.service
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment