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
+112 -100
View File
@@ -1,6 +1,7 @@
---
title: Minecraft Server on Docker ⛏ 🐳
date: 2022-05-24
lastmod: 2024-07-20
author: "ahmza"
draft: false
weight:
@@ -9,59 +10,68 @@ tags: ["games", "docker"]
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
to do that[^1].
## 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!
A Minecraft server does not require a ton of resources to run, but from my
experience the more resources you can throw at it the better when you start to
introduce mods and more players.
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.
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 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
- 512 MB RAM
- 2 GB Storage space
#### **Recommended (10-15 Players)**
```
### Recommended (10-15 Players)
```
- Intel Core or AMD K8 based CPU
- 3 GB RAM
- 16 GB Storage Space
#### **Optimal (20+ Players)**
```
### Optimal (20+ Players)
```
- Intel i5/i7 or AMD Ryzen 5/7 Based CPU
- 6 GB RAM
- 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
# Make the folder
mkdir minecraft-server
# Ender the folder
# Enter the folder
cd minecraft-server
```
2. **Create an environment file to be used by the Docker Container**
- The _.env_ file allows us to specify variables used in the build process.
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
@@ -69,23 +79,26 @@ touch .env
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096 #change this to your desired value (in MB)
SERVER_JAR=minecraft_server.<version>.jar # change the version
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**
- The _docker-compose.yml_ file specifies the container that we want to build [^3]
3. **Create the `docker-compose.yml` file:**
```bash
# Create the file
touch docker-compose.yml`
touch docker-compose.yml
# Open in a text editor
vim docker-compose.yml
```
```yaml
version: "3"
- `docker-compose.yml` specifies the configuration of our Minecraft server:
- 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:
minecraft-server:
build:
@@ -96,8 +109,8 @@ services:
volumes:
- .server-data:/server
ports:
- 25565:25565
- 25575:25575
- 25565:25565 # Game
- 25575:25575 # RCON
container_name: ${CONTAINER_NAME}
restart: unless-stopped
@@ -105,19 +118,27 @@ volumes:
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
# Create the file
touch Dockerfile`
touch Dockerfile
# Open the file in a text editor
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
FROM eclipse-temurin:17-jre
FROM eclipse-temurin:21
ARG SERVER_MEM
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
```
## **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
it fails with the error below:
When you try to start the container, you might encounter the following error:
```bash
Minecraft Server is starting
@@ -143,99 +163,91 @@ Minecraft Server is starting
Error: Unable to access jarfile server.jar
```
This is because we have not downloaded the server jar file yet, that is
our next step.
This happens because we haven't downloaded the server jar file yet. Let's do that now.
1. **Navigate to one of the following sites:**[^4]
- [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**
1. **Create a folder in the `minecraft-server` directory called `.server-data`:**
```bash
mkdir .server-data
cd .server-data
```
3. **Download the jar file - This will depend on the option above so read the instructions**
4. **Go back to the root minecraft-server folder**
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` directory:**
```bash
cd ..
```
5. **Run the container**
This will create our eula.txt as well as other files needed.
4. **Edit `SERVER_JAR in` `.env` with the name of the server file you just downloaded:**
```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
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**
6. **Accept the EULA:**
```bash
# enter the .server-data folder
cd .server-data
# edit eula.txt in a text editor
vim eula.txt
# change `eula=false` to `eula=true`
# Edit eula.txt in a text editor
vim .server-data/eula.txt
# Change `eula=false` to `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:
- **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.
## Run the Server
8. **Run the container**
**Run the container in detached mode:**
```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
```
**To monitor the logs as the server starts:**
```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
# If you see the bottom line then 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"
# 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
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
mods or creating scripts to manage the server.
[^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`
There are many exciting possibilities from here, such as installing mods or
creating scripts to manage the server. Enjoy your Minecraft adventures!