revamped the mc server setup post

This commit is contained in:
Hamza Ahmed
2024-09-14 15:33:46 +01:00
parent 9ed0a4cbd9
commit 5b55cd607c
2 changed files with 355 additions and 100 deletions
+110 -98
View File
@@ -1,6 +1,7 @@
--- ---
title: Minecraft Server on Docker ⛏ 🐳 title: Minecraft Server on Docker ⛏ 🐳
date: 2022-05-24 date: 2022-05-24
lastmod: 2024-07-20
author: "ahmza" author: "ahmza"
draft: false draft: false
weight: weight:
@@ -9,59 +10,68 @@ tags: ["games", "docker"]
description: "Ever wanted to build a Minecraft server in docker !! Start here" description: "Ever wanted to build a Minecraft server in docker !! Start here"
--- ---
## **Introduction**
Minecraft is a great game and better with friends. A dedicated server allows you ## Introduction
to do that[^1]. Minecraft is a great game that becomes even more enjoyable when played with
friends. One of the best ways to do this is by setting up a dedicated server.
This guide will help you do just that!
A Minecraft server does not require a ton of resources to run, but from my Setting up and running a Minecraft server does not require a lot of resources,
experience the more resources you can throw at it the better when you start to but based on my experience, allocating more resources significantly enhances
introduce mods and more players. performance, especially when you start to add mods and increase player count.
I run our server on my main PC. This allows me to leverage the system resources
in my PC 🦾 leaving the [Pi
Cluster](https://blog.ahmza.com/posts/building-a-docker-swarm-with-pis/) system
resources to handle the rest of the stuff in my lab.
## **Prerequisites**
## Prerequisites
- Docker - Docker
- Docker Compose - Docker Compose
## **Requirements**[^2] For more information about my Docker setup, see [Pi Cluster](/posts/pi-docker-swarm/)
#### **Minimum (1-5 Players)**
## Requirements
_Requirements Gathered from [here](https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix_.28Linux.2C_BSD.2C_macOS.29)_
### Minimum (1-5 Players)
```
- Intel Pentium 4 or AMD Athlon based CPU - Intel Pentium 4 or AMD Athlon based CPU
- 512 MB RAM - 512 MB RAM
- 2 GB Storage space - 2 GB Storage space
```
#### **Recommended (10-15 Players)** ### Recommended (10-15 Players)
```
- Intel Core or AMD K8 based CPU - Intel Core or AMD K8 based CPU
- 3 GB RAM - 3 GB RAM
- 16 GB Storage Space - 16 GB Storage Space
```
#### **Optimal (20+ Players)** ### Optimal (20+ Players)
```
- Intel i5/i7 or AMD Ryzen 5/7 Based CPU - Intel i5/i7 or AMD Ryzen 5/7 Based CPU
- 6 GB RAM - 6 GB RAM
- 35 GB Storage Space - 35 GB Storage Space
```
## **Building the Container** **My opinion:**
1. **Create a directory in which you will keep the Minecraft server files** I personally went with the optimal settings as I wanted to run mods as well as
have the capacity for ~10 players. This gives the server breathing room.
However, if you will be running no mods or only a few lightweight mods and only
a few players, there is no need to go higher than 3-4 GB.
## Building the Container
Let's get started on building the Minecraft server.
1. **Create a directory for the Minecraft server files:**
```bash ```bash
# Make the folder # Make the folder
mkdir minecraft-server mkdir minecraft-server
# Ender the folder # Enter the folder
cd minecraft-server cd minecraft-server
``` ```
2. **Create an environment file to be used by the Docker Container** 2. **Create an environment file for the Docker Container:**
- The _.env_ file allows us to specify variables used in the build process. - The `.env` file allows us to specify variables used in the build process.
```bash ```bash
# Create a .env file # Create a .env file
touch .env touch .env
@@ -69,23 +79,26 @@ touch .env
vim .env vim .env
# Enter the following variables # Enter the following variables
CONTAINER_NAME=minecraft-server CONTAINER_NAME=minecraft-server
SERVER_MEM=4096 #change this to your desired value (in MB) SERVER_MEM=4096 # Change this to your desired value (in MB)
SERVER_JAR=minecraft_server.<version>.jar # change the version SERVER_JAR=<downloaded-server-file>.jar # Minecraft server jar file. Change this later
``` ```
3. **Create the `docker-compose.yml` file:**
3. **Create the docker-compose.yml file**
- The _docker-compose.yml_ file specifies the container that we want to build [^3]
```bash ```bash
# Create the file # Create the file
touch docker-compose.yml` touch docker-compose.yml
# Open in a text editor # Open in a text editor
vim docker-compose.yml vim docker-compose.yml
``` ```
```yaml - `docker-compose.yml` specifies the configuration of our Minecraft server:
version: "3" - Build a Docker image using the current context and pass some arguments.
- Attach the volume .server-data where Minecraft's files will be stored.
- Open network ports to access the Docker container.
- Name the Docker container.
- Ensure the container always restarts unless explicitly stopped.
```yaml
services: services:
minecraft-server: minecraft-server:
build: build:
@@ -96,8 +109,8 @@ services:
volumes: volumes:
- .server-data:/server - .server-data:/server
ports: ports:
- 25565:25565 - 25565:25565 # Game
- 25575:25575 - 25575:25575 # RCON
container_name: ${CONTAINER_NAME} container_name: ${CONTAINER_NAME}
restart: unless-stopped restart: unless-stopped
@@ -105,19 +118,27 @@ volumes:
server-data: server-data:
``` ```
4. **Create the Dockerfile file** 4. **Create the `Dockerfile`:**
- The Dockerfile builds the container image. - Referenced in the `docker-compose.yml` build stage as context `.`.
- The `Dockerfile` specifies the software running inside the container.
```bash ```bash
# Create the file # Create the file
touch Dockerfile` touch Dockerfile
# Open the file in a text editor # Open the file in a text editor
vim Dockerfile vim Dockerfile
``` ```
- Use the [eclipse-temurin:21](https://hub.docker.com/_/eclipse-temurin) image to provide the Java JRE
- Use the required Java version for the version of Minecraft you are running.
- Collect the arguments from the .env file.
- Set the environment variables.
- Set the working directory to /server, on our local system is .server-data.
- Run the Minecraft server jar with the environment variables.
```Dockerfile ```Dockerfile
FROM eclipse-temurin:17-jre FROM eclipse-temurin:21
ARG SERVER_MEM ARG SERVER_MEM
ARG SERVER_JAR ARG SERVER_JAR
@@ -130,12 +151,11 @@ WORKDIR /server
CMD echo "Minecraft Server is starting\n" && java -Xms128M -Xmx${SERVER_MEM}M -jar ${SERVER_JAR} nogui CMD echo "Minecraft Server is starting\n" && java -Xms128M -Xmx${SERVER_MEM}M -jar ${SERVER_JAR} nogui
``` ```
## **Setup the Server files** ## Setup the Server Files
We’re almost there, just a few steps left !! We’re almost there, just a few steps to go.
The curious among you may have realised when trying to start the container that When you try to start the container, you might encounter the following error:
it fails with the error below:
```bash ```bash
Minecraft Server is starting Minecraft Server is starting
@@ -143,99 +163,91 @@ Minecraft Server is starting
Error: Unable to access jarfile server.jar Error: Unable to access jarfile server.jar
``` ```
This is because we have not downloaded the server jar file yet, that is This happens because we haven't downloaded the server jar file yet. Let's do that now.
our next step.
1. **Navigate to one of the following sites:**[^4] 1. **Create a folder in the `minecraft-server` directory called `.server-data`:**
- [Vanilla Minecraft Server](https://www.minecraft.net/en-us/download/server) - instructions found here[^5]
- [Fabric Mod loader server](https://fabricmc.net/use/server/) - instructions found here [^6]
2. **Create a folder in the Minecraft-server folder called .server-data**
```bash ```bash
mkdir .server-data mkdir .server-data
cd .server-data cd .server-data
``` ```
3. **Download the jar file - This will depend on the option above so read the instructions** 2. **Download a Minecraft server jar file:**
4. **Go back to the root minecraft-server folder**
- [Vanilla Minecraft Server](https://www.minecraft.net/en-us/download/server)
- Right-click the green link that says minecraft_server.<version>.jar and copy the link address.
- Download with: curl -o server.jar <link you copied here>
- [Fabric Mod loader server](https://fabricmc.net/use/server/)
- Select the Minecraft version, Fabric Loader Version, and the Installer Version of your choice. I tend to go with the latest.
- Download with: Copy the curl command under CLI download
3. **Go back to the root `minecraft-server` directory:**
```bash ```bash
cd .. cd ..
``` ```
5. **Run the container** 4. **Edit `SERVER_JAR in` `.env` with the name of the server file you just downloaded:**
This will create our eula.txt as well as other files needed.
```bash ```bash
docker compose up # use CTRL+C to exit # Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096
SERVER_JAR=<downloaded-server-file>.jar # Change this to the name of the .jar you downloaded
``` ```
5. **Run the container to generate necessary files like `eula.txt`:**
```bash ```bash
docker compose up
```
You will see something like this:
```bash
minecraft-server | Starting net.minecraft.server.Main minecraft-server | Starting net.minecraft.server.Main
minecraft-server | [18:05:50] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info. minecraft-server | [18:05:50] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
minecraft-server exited with code 0 minecraft-server exited with code 0
``` ```
6. **Accept the EULA** 6. **Accept the EULA:**
```bash ```bash
# enter the .server-data folder
cd .server-data # Edit eula.txt in a text editor
# edit eula.txt in a text editor vim .server-data/eula.txt
vim eula.txt # Change `eula=false` to `eula=true`
# change `eula=false` to `eula=true`
eula=true eula=true
``` ```
7. **While in the .server-data folder make any changes you want** 7. **Make any additional changes you want:**
- Notable files:
- server.properties - Configure server name, game mode, world type, etc.
- ops.json - Server operators (can be set in-game).
- whitelist.json - Players allowed to join the server (can be set in-game).
- Notable files: ## Run the Server
- **server.properties** - properties like server name, game mode, world type etc…
- **ops.json** - list of server operators (easier to set ingame)
- **whitelist.json** - list of players allowed to join the server everyone else rejected access.
8. **Run the container** **Run the container in detached mode:**
```bash ```bash
# -d flag allows the container to run in detached mode i.e in the background # The -d flag allows the container to run in detached mode, i.e., in the background
docker compose up -d docker compose up -d
``` ```
**To monitor the logs as the server starts:**
```bash ```bash
# monitor the logs as the server starts. CTRL+C to exit # Monitor the logs as the server starts. Use CTRL+C to exit
docker logs minecraft-server --follow docker logs minecraft-server --follow
# If you see the bottom line then your server is up and running # If you see the following lines, your server is up and running:
[18:17:01] [Server thread/INFO]: Time elapsed: 25529 ms [18:17:01] [Server thread/INFO]: Time elapsed: 25529 ms
[18:17:01] [Server thread/INFO]: Done (34.571s)! For help, type "help" [18:17:01] [Server thread/INFO]: Done (34.571s)! For help, type "help"
``` ```
## Conclusion ## Conclusion
Well done you have setup a Minecraft server, now go play !! Congratulations! You've successfully set up a Minecraft server. Now it's time
to play!
There is a lot of cool stuff you can do from this point, for example installing There are many exciting possibilities from here, such as installing mods or
mods or creating scripts to manage the server. creating scripts to manage the server. Enjoy your Minecraft adventures!
[^1]:
Hosting your own dedicated server allows you to modify every aspect of the
server as you see fit. I.E you can modify the server-properties, you can
implement a whitelist not to mention being able to add any mods you want
[^2]: Requirements Gathered from here [https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix\_.28Linux.2C_BSD.2C_macOS.29](https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix_.28Linux.2C_BSD.2C_macOS.29)
[^3]:
Yaml is very picky 😞 when it comes to formatting so if you encounter any
errors double check your formatting !!
[^4]:
I have left Forge out as it is a more involved process plus Fabric is
better 😜
[^5]:
Right click the green link that says something like minecraft_server.x.xx.x.jar and copy the link address
`curl -o server.jar \<link you copied here\>`
[^6]:
Select the Minecraft version, Fabric Loader Version and the Installer Version of your choice. I tend to go with the latest.
`Copy the curl command under CLI download`
@@ -0,0 +1,243 @@
---
title: Minecraft Server on Docker ⛏ 🐳
date: 2022-05-24
lastmod: 2024-07-20
author: "ahmza"
draft: false
weight:
tags: ["games", "docker"]
description: "Ever wanted to build a Minecraft server in docker !! Start here"
---
## **Introduction**
Minecraft is a great game that becomes even more enjoyable when played with
friends. One of the best ways to do this is by setting up a dedicated server.
This guide will help you do just that!
Setting up and running a Minecraft server does not require a lot of resources,
but based on my experience, allocating more resources significantly enhances
performance. Especially when you start to add mods and increase player count.
## **Prerequisites**
- Docker
- Docker Compose
See [Pi Cluster](/posts/pi-docker-swarm/)
for more information about my docker setup.
## **Requirements**
_Requirements Gathered from [here](https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix_.28Linux.2C_BSD.2C_macOS.29)_
### **Minimum (1-5 Players)**
- Intel Pentium 4 or AMD Athlon based CPU
- 512 MB RAM
- 2 GB Storage space
### **Recommended (10-15 Players)**
- Intel Core or AMD K8 based CPU
- 3 GB RAM
- 16 GB Storage Space
### **Optimal (20+ Players)**
- Intel i5/i7 or AMD Ryzen 5/7 Based CPU
- 6 GB RAM
- 35 GB Storage Space
**My opinion**:
I personally went with the **optimal** settings as I wanted to run mods as well
as have the capacity for ~10 players. This gives the server breathing room.
However if you will be runing no mods or a few light weight mods and only a few
players then there really is no need to go higher than 3-4 GB.
## **Building the Container**
Lets get started on building the Minecraft server
1. **Create a directory for the Minecraft server files**:
```bash
# Make the folder
mkdir minecraft-server
# Enter the folder
cd minecraft-server
```
2. **Create an environment file for the Docker Container**:
- The _.env_ file allows us to specify variables used in the build process.
```bash
# Create a .env file
touch .env
# Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096 #change this to your desired value (in MB)
SERVER_JAR=<downloaded-server-file>.jar # Minecraft server jar file. Change this later
```
3. **Create the _docker-compose.yml_ file**:
```bash
# Create the file
touch docker-compose.yml`
# Open in a text editor
vim docker-compose.yml
```
- _docker-compose.yml_ is the spec of our Minecraft server.
- Build a docker image using context . and pass some ARGS.
- Attach volume .server-data, where Minecraft's files will be stored.
- Open network ports to access to the Docker container
- Give the docker container a name
- The container will always restart unless we tell it to stop.
```yaml
services:
minecraft-server:
build:
context: .
args:
SERVER_MEM: ${SERVER_MEM}
SERVER_JAR: ${SERVER_JAR}
volumes:
- .server-data:/server
ports:
- 25565:25565 # Game
- 25575:25575 # RCON
container_name: ${CONTAINER_NAME}
restart: unless-stopped
volumes:
server-data:
```
4. **Create the _Dockerfile_ file**:
- requested in docker-compose.yml build stage as context .
- The _Dockerfile_ is the spec for software running inside the container
```bash
# Create the file
touch Dockerfile
# Open the file in a text editor
vim Dockerfile
```
- We use the [eclipse-temurin:21](https://hub.docker.com/_/eclipse-temurin) image to provide the java JRE
- Use the required java version for the version of Minecraft you are running
- Collect the ARGs from the .env file
- Set the environment variables
- Set the working directory to /server which on our local system is .server-data
- Run the minecraft server jar with the ENV variables
```Dockerfile
FROM eclipse-temurin:21
ARG SERVER_MEM
ARG SERVER_JAR
ENV SERVER_MEM=${SERVER_MEM}
ENV SERVER_JAR=${SERVER_JAR}
WORKDIR /server
CMD echo "Minecraft Server is starting\n" && java -Xms128M -Xmx${SERVER_MEM}M -jar ${SERVER_JAR} nogui
```
## **Setup the Server files**
We’re almost there, just a few steps to go.
When you try to start the container, you might encounter the following error:
```bash
Minecraft Server is starting
Error: Unable to access jarfile server.jar
```
This happens because we haven't downloaded the server jar file yet. Let's do
that now
1. **Create a folder in the minecraft-server folder called .server-data**:
```bash
mkdir .server-data
cd .server-data
```
2. **Download a Minecraft server jar file**:
- [Vanilla Minecraft Server](https://www.minecraft.net/en-us/download/server)
- Right click the green link that says minecraft_server.<version>.jar and copy the link address
- Download with: `curl -o server.jar <link you copied here>`
- [Fabric Mod loader server](https://fabricmc.net/use/server/)
- Select the Minecraft version, Fabric Loader Version and the Installer Version of your choice. I tend to go with the latest.
- Download with: `Copy the curl command under CLI download`
3. **Go back to the root minecraft-server folder**
```bash
cd ..
```
4. **Edit SERVER_JAR in .env with the name of the .jar you just downloaded**:
```bash
# Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096
SERVER_JAR=<downloaded-server-file>.jar # Change this to the name of the .jar you downloaded
```
5. **Run the container to generate necessary files like 'eula.txt'**:
```bash
docker compose up
```
you will see something like this:
```bash
minecraft-server | Starting net.minecraft.server.Main
minecraft-server | [18:05:50] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
minecraft-server exited with code 0
```
6. **Accept the EULA**:
```bash
# edit eula.txt in a text editor
vim .server-data/eula.txt
# change `eula=false` to `eula=true`
eula=true
```
7. **Make any additional changes you want**:
- Notable files:
- **server.properties** - Configure server name, game mode, world type etc…
- **ops.json** - server operators (can be set in-game)
- **whitelist.json** - players allowed to join the server (can be set in-game)
## Run the Minecraft Server
1. **Run the container in detached mode**:
```bash
# The -d flag allows the container to run in detached mode, i.e., in the background
docker compose up -d
```
```bash
# monitor the logs as the server starts. Use CTRL+C to exit
docker logs minecraft-server --follow
# If you see the following lines, your server is up and running:
[18:17:01] [Server thread/INFO]: Time elapsed: 25529 ms
[18:17:01] [Server thread/INFO]: Done (34.571s)! For help, type "help"
```
## **Conclusion**
Congratulations! You've successfully set up a Minecraft server. Now it's time
to play!
There are many exciting possibilities from here, such as installing mods or
creating scripts to manage the server. Enjoy your Minecraft adventures!