revamped the mc server setup post
This commit is contained in:
@@ -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:
|
- Notable files:
|
||||||
- **server.properties** - properties like server name, game mode, world type etc…
|
- server.properties - Configure server name, game mode, world type, etc.
|
||||||
- **ops.json** - list of server operators (easier to set ingame)
|
- ops.json - Server operators (can be set in-game).
|
||||||
- **whitelist.json** - list of players allowed to join the server everyone else rejected access.
|
- whitelist.json - Players allowed to join the server (can be set in-game).
|
||||||
|
|
||||||
8. **Run the container**
|
## Run the Server
|
||||||
|
|
||||||
|
**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!
|
||||||
Reference in New Issue
Block a user