Created
May 11, 2026 00:01
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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