This repo shows how to setup a Minecraft Server that gives users the ability to change the world through Python. Docker all the things. This will be running a Spigot Minecraft 1.13.1 server with the RaspberryJuice Plugin that allows Python API calls. Interaction with the Minecraft server will be done through the mcpi library with API instructions available here.
| Jupyterhub | Minecraft |
|---|---|
![]() |
![]() |
This project was created for the purposes of teaching introductory Python concepts.
This will run a Minecraft server and JupyterHub behind and NGINX proxy. SSL is done via Let's Encrypt for secure access to JupyterHub. Users auth to the JupyterHub via GitHub OAuth.
Create a GitHub OAuth application that we will link to JupyterHub https://github.com/settings/applications/new with https://subd.domain.com/hub/oauth_callback as the callback URL.
Note the client_id and client_secret that GitHub provides after creation. We will need them below.
You will configure these services through environment variables. Below is a list of the variables you need to change before launching the stack. The sections below are the services in the docker-compose.yml file.
- OAUTH_CALLBACK_URL: This will be the callback URL you provided to GitHub when creating the application eg. https://subd.domain.com/hub/oauth_callback
- GITHUB_CLIENT_ID: The client_id GitHub provided after creationg the application.
- GITHUB_CLIENT_SECRET: The client_secret GitHub provided after creating the application
- VIRTUAL_HOST: The domain that jupyterhub will be accessed at. eg sub.domain.com
- LETSENCRYPT_HOST: The domain that jupyterhub will be accessed at. eg sub.domain.com
- LETSENCRYPT_EMAIL: The contact email for Let's Encrypt eg. admin@domain.com
- JUPYTERHUB_ADMIN: The GitHub username for the first Admin account; supply multieple names separated by commas. Subsequent users can be added through the JupyterHub GUI after launch.
docker-compose up -d
To give your minecraft user Operator privleage, open up RCON cli.
docker-compose exec minecraft rcon-cli
> op MINECRAFTNAMEOpen your Minecraft Java client and connect to your Multiplayer Server, once you're in game, open up a Jupyter notebook at your domain, and try the following.
from mcpi import minecraft
mc = minecraft.Minecraft.create('minecraft')
mc.postToChat("Hello Minecraft World")If you see your message in the chat, all is working!
I found the following very helpful in setting this up:

