Setup your own free Minecraft Server running on release.com
One of the coolest things about working at Release has been figuring out all of the fun stuff that we can do with the platform. While our main use case is helping people build environments for their applications, anything that runs in Docker will run easily on Release.
Early on, I found a handful of repos that helped us build out our platform. One that has been the most fun all along is the docker-minecraft-server from itzg. I used it in the early days because it had a little complexity and a fully working docker-compose ecosystem to play around with. It’s got the great side effect of when it runs, I let my kids test it out!
So while you’re sipping on egg nog and enjoying a 2020 Holiday season on COVID lock-down, here’s a walkthrough of how to get your very own free Minecraft server up and running on Release.
I highly recommend following along on the video tutorial. I’ve included step by step instructions for anyone that learns better through reading or if you’re confused about a step.
If you want to see a live version of this setup, we fired up our own Minecraft server that we built using these steps. So if you’re bored over the Holidays, pop in and say hello! Here’s our Server name if you want to say hi.
Play Minecraft With Us on the Release Team Minecraft Server team-release-minecraft.release.com
Full video walkthrough of this tutorial
Detailed instructions to get your Minecraft Server up and running
Background
At the time of this writing, we have a “Starter” plan that’s free so you can give this a shot and have some Holiday fun on Release. Since we’re hosting all of the environments on Release on the starter plan we have a limitation of 2Gb/container. That’s sufficient for a Minecraft server for your kids and their friends.
To get started, take a look at https://github.com/awesome-release/docker-minecraft-server, which we cloned from itzg. Fork or clone this repo into your GitHub account so you’ve got your own version of it to play around with.
Once you’ve got your own repo to work with, I recommend taking a quick read through the README, there are a lot of configuration options and the documentation is extremely well done.
We’re also going to use the Rcon Web Administrative portal. Take a look at the documentation, specifically the environment variables that can be configured. itzg made a version of this for Docker called docker-rcon-web-admin that we are using when when we load the rcon and rcon-ws services in this tutorial.
For this walkthrough, we’re going to bring up a vanilla Minecraft server with an Rcon administrative portal running in a standalone container. This will let you and your kids have full control over the Minecraft server and ban friends who can’t fight off Zombie Pig Men. Here’s an overview of what the system architecture looks like.
The master branch of this repo is already setup to work with this docker-compose file in Release. Take a look at the .release.yaml file in the root of the repo’s directory.
This sets the compose directive to `examples/docker-compose-with-rcon.yml’ which tells Release that’s the docker-compose file you want to use. If you want to play around with a Forge server or other examples, just point the .release.yaml file at the corresponding docker-compose.
1. Create a new application in Release
Ok, let’s setup the server.
- Fork, clone or copy this repo: https://github.com/awesome-release/docker-minecraft-server Here are some simple instructions on how to copy this repo over to your account.
- Login or create an account on Release here: https://release.com
- Follow the steps to create your account. Once your account is created, click the “Create an application” button.
- Select your docker-minecraft-server repo. If you don’t see it in the list, click Configure the Release app on Github link to assign permissions to your repo.
- Add a name for your application. Note this name is used in your server hostname.
- Click Generate App Template.
2. Edit the generated application template
Release automatically detects and creates an application template from the docker-compose file but there are a few edits we need to make based on how this repo works and to make sure we can fit the server into the Starter plan. If you want to dive in, read the documentation about Release Application Templates.
For a little background, take a look at this diagram.
We need to make our application reflect this networking setup.
In Release we have two different kinds of loadbalancers based on Amazon’s ELB’s and ALB’s.
We also need to make sure we’re using the correct type of port for the use case. There are two types of ports container_port and node_port. In short, a node_port is exposed to the Internet and a conatiner_port is not. Because the rcon service is only internally facing, we want to set its port to a container_port. For more info on setting the correct type of port, read about ports in Release.
So let’s make the changes necessary to setup the Application Template correctly.
Update memory to 2Gb
- The Minecraft server is setup to use 1Gb of max memory so we need to set the default memory limit in Release to 2Gb to leave enough room with some overhead. Edit the app template to allow the services to use up to 2Gb of memory.
Update hostnames and ports
- Change the port type for 25575 to container_port and remove the target_port line.
- Add a loadbalancer: true for port 25565.
- Add a hostname field at the same level as ports in the file and set to hostname: my-server-${env_id}-${domain}. You can set my-server to anything you’d like. ${env_id} and ${domain} are variables that Release will automatically fill in to customize your domain.
- Remove the ALB hostname for the minecraft service. (We only need the minecraft service exposed on port 25565 via an ELB not an ALB which is for http/https).
- Click “Save and Continue”.
3. Setup Environment Variables
We need to set a few passwords via environment variables and an environment variable mapping for the rcon websocket hostname. For more information about these environment variables, see the documentation/README files here:
In this diagram we show the passwords that need to be set via environment variables.
Setup passwords via environment variables
On the minecraft service we need to set a password for its local rcon service on port 25575 so other containers can connect to it. RCON_PASSWORD is the environment variable that needs to be set for this and on the rcon and rcon-ws service we need to set RWA_RCON_PASSWORD to the same value so those services can control the minecraft server.
- Click on “Edit” for “Default Environment Variables”.
- Set RCON_PASSWORD in the minecraft service and add secret: true. To encrypt this value in the database.
- Set RWA_RCON_PASSWORD to the same value as you set in step 2 on both the rcon and rcon-ws services.
- Set RWA_PASSWORD which will be the default password used for the RCON Web Administration tool in both the rcon and rcon-ws services. Make sure to add secret: true to encrypt this value.
Setup mapping of environment variable RWA_WEBSOCKET_URL_SSL
The last environment variable we need to add is a mapping that tells Release to map RWA_WEBSOCKET_URL_SSL to a dynamically created environment variable for hostnames created in Release RCON_WS_INGRESS_HOST. RWA_WEBSOCKET_URL_SSL tells the Rcon Web Admin tool which container host url is running the websocket for this service which is on our rcon-ws service on port 4327.
RCON_WS_INGRESS_HOST is automatically created everytime a new environment is created by Release and always conatins the correct hostname for rcon-ws. This value can change when new environments are created, thus we can’t just hard set RWA_WEBSOCKET_URL_SSL. This is where an environment variable mapping comes into play. The diagram above represents the change we need to add in our Default Environment Variables.
- Add a mapping: directive and map RWA_WEBSOCKET_URL_SSL to the top of the file.
When these chages and your env passwords have been made, your file should look like this:
- Click ‘Save & Deploy’
Your environment is now deploying, you can click on the deploy and watch its progress. When it’s done, navigate to the environment screen and inspect your created hostnames.
4. Setup the Minecraft Client to Connect to your new server and login to the RCON web admin tool.
- Using the minecraft hostname that was created by Release, create a new server within the Minecraft Client.
- Click on the rcon hostname that was created by Release to access the RCON Web Admin user interface.
- Login using the same password you set for the RWA_PASSWORD environment variable.
- Add the minecraft server.
- Add the console widget.
- Run admin commands on your server!
What if it doesn’t work???
If for any reason you made a mistake and something doesn’t work. You can navigate to your App Settings and edit your Application Template and your Default Environment Variables. Double check you’ve made the proper settings. Once you’ve made these edits, navigate to your environments screen, delete your environment and create a new one. The beauty of Release is environments can be torn down and up whenever you want. Here are the links to the docs on how to edit your App Template and Default Environment Variables.
Delete and Create a new Environment
Conclusion
You now have your very own Minecraft Server running on the Release Starter Plan. This server was created in an Ephemeral Environment in Release and will destroy itself in 7 days. If you’d like your server to remain indefinitely, you’ll need to delete the environment and re-create it as a permanent environment.
Make sure you choose permanent when creating the environment.
With the RCON Web Admin tool you can control and make the server your own special place. If you have any questions, please contact the Release team at hello@release.com. Jump in and say hello on our Release Team Minecraft Server here:
team-release-minecraft.releasehub.com
Don’t forget to signup for your free Release account on our starter plan!
We also have a Release Community Discord you can join if you need help or just want to say hello. Join us here: Release Community Discord
Happy Holidays from the Release Team!!!
About Release
Release is the simplest way to spin up even the most complicated environments. We specialize in taking your complicated application and data and making reproducible environments on-demand.
Speed up time to production with Release
Get isolated, full-stack environments to test, stage, debug, and experiment with their code freely.