A simple web panel for Minecraft servers using Geyser+Floodgate to handle whitelist requests for both Java and Bedrock players.
This application was initially written in about half a day.
This application is called after my Minecraft server that is as well called MangoTango. That server is named after one of my cats though 🙂
MangoTango requires some setup to get working properly. As of right now, I only officially support docker-compose setups. The application should work outside of docker as well.
- Clone this repository with
git clone https://github.com/Naamloos/MangoTango
. cd MangoTango
- Edit
docker-compose.yml
. All values you'll most likely want to modify have a comment readingCHANGEME
- Open the Frontend directory (
cd Frontend
) and modify all values in.env
- Go back up one directory (
cd ../
) - Run docker compose
docker compose up --detach
- Your web services should now be up and running. We still need to do a bit more though.
- Give internet access to the API.
docker network connect bridge mangotango-mangotango-api
- Done! You should be up and running. You can for example use NGINX to reverse proxy to
mangotango-api
for the api andmangotango-web
for the web panel.
MangoTango does not provide any prebuilt images, due to react injecting environment variables in the build step. Providing prebuilt images would remove the customizability of the front end.
The API provided by GeyserMC for resolving XUIDs does not always provide an answer for every xuid. To ensure MangoTango keeps working, an alternative API is provided to resolve XUIDs. If your bedrock players can't send requests, try setting the following environment variable in your docker-compose.json
.
- OPENXBL_KEY=your_key_here
This key can be obtained at the following website: OpenXBL
Do take note that it is generally not a good idea to host your services behind port 80! Make sure to either serve your site over HTTPS or have cloudflare as a proxy.
server
{
listen 80;
server_name whitelist.example.org;
location /
{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://mangotango-web:3000;
}
}
server
{
listen 80;
server_name whitelist-api.example.org;
location /
{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://mangotango-api;
}
underscores_in_headers on;
}
Do make sure to correctly set the PUBLIC_URL
env variable for the front end, and the BASE_URI
environment variable for the back end and again, it is probably a good idea to serve your pages over HTTPS 🙂
server
{
listen 80;
server_name whitelist.example.org;
location /whitelist/api/
{
rewrite ^/whitelist/api/(.*)$ /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://mangotango-api;
}
location /whitelist/
{
rewrite ^/whitelist/(.*)$ /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://mangotango-web:3000;
}
}
MangoTango uses a header named rcon_password
to authenticate!
NGINX does not allow underscores in headers by default, so you will have to add underscores_in_headers on;
to your NGINX server declaration.
Example can be seen in the example NGINX config above.