8000 GitHub - mkuthan/minecraft-gcp: Minecraft Server automation on GCP
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

mkuthan/minecraft-gcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

minecraft-gcp

Minecraft Server automation on GCP, for my son and his friends.

Features:

TODO list:

  • Compute instance cost reduction
  • OAuth authentication
  • Docker image with Minecraft Server
  • DNS

Usage

Server status page.

https://your-project.cloudfunctions.net/server_status?api_key=super_secret_key

Start server.

https://your-project.cloudfunctions.net/start_server?api_key=super_secret_key

Stop server.

https://your-project.cloudfunctions.net/stop_server?api_key=super_secret_key

Local environment

Use the venv command to create a virtual copy of the entire Python installation.

python -m venv venv

Set your shell to use the venv paths for Python by activating the virtual environment.

source venv/bin/activate

Install packages (see pre-installed packages for recommended versions).

pip install -r minecraft/requirements.txt

Google Cloud

Update components.

gcloud components update

Configure default projects.

gcloud config set project minecraft-272917

Enable required APIs.

gcloud services enable appengine.googleapis.com
gcloud services enable iam.googleapis.com

Create service account for Terraform.

gcloud iam service-accounts create terraform

Assign mandatory roles for created service account.

gcloud projects add-iam-policy-binding minecraft-272917 \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/storage.admin"
gcloud projects add-iam-policy-binding minecraft-272917 \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/cloudfunctions.admin"
gcloud projects add-iam-policy-binding minecraft-272917 \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/compute.admin"
gcloud projects add-iam-policy-binding minecraft-272917 \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/pubsub.admin"
gcloud projects add-iam-policy-binding minecraft-272917 \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/cloudscheduler.admin"
gcloud projects add-iam-policy-binding minecraft-272917 \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/appengine.appAdmin"
gcloud projects add-iam-policy-binding minecraft-272917 \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountAdmin"

Service account needs to be a member of the Compute Engine default service account.

gcloud iam service-accounts add-iam-policy-binding minecraft-272917@appspot.gserviceaccount.com \
  --member="serviceAccount:terraform@minecraft-272917.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

Generate service account key.

gcloud iam service-accounts keys create minecraft-terraform.json \
  --iam-account=terraform@minecraft-272917.iam.gserviceaccount.com

Copy downloaded key into clipboard and set GitHub secret GCP_SA_KEY, paste the key from the clipboard.

pbcopy < minecraft-terraform.json

Remove the key.

rm minecraft-terraform.json

Github

Set up GitHub secret GCP_PROJECT_ID.

Secret manager

Create secret for RCON.

gcloud secrets create "rcon" --replication-policy="automatic"

Add secret version.

echo -n "this is my super rcon secret" | \
    gcloud secrets versions add "rcon" --data-file=-

Create secret for cloud functions api key.

gcloud secrets create "api" --replication-policy="automatic"

Add secret version.

echo -n "this is my super api secret" | \
    gcloud secrets versions add "api" --data-file=-

Cloud functions

Add secretmanager.secretAccessor role to service account.

TODO

Deploy cloud functions (see deploy manual).

Server status page.

gcloud functions deploy server_status \
  --timeout=180s --max-instances=1 \
  --region=europe-west1 \
  --stage-bucket=minecraft-272917-cloud-functions \
  --source=./cloud-function --runtime=python38 --trigger-http 

Start server page.

gcloud functions deploy start_server \
  --timeout=300s --max-instances=1 \
  --region=europe-west1 \
  --stage-bucket=minecraft-272917-cloud-functions \
  --source=./cloud-function --runtime=python38 --trigger-http

Stop server page.

gcloud functions deploy stop_server \
  --timeout=300s --max-instances=1 \
  --region=europe-west1 \
  --stage-bucket=minecraft-272917-cloud-functions \
  --source=./cloud-function --runtime=python38 --trigger-http

Automated server stopping handler.

gcloud functions deploy stop_server_handler \
  --timeout=300s --max-instances=1 \
  --region=europe-west1 \
  --stage-bucket=minecraft-272917-cloud-functions \
  --source=./cloud-function --runtime=python38 --trigger-topic ten-minutes-jobs

Disable built-in authentication for HTTP cloud functions.

gcloud alpha functions add-iam-policy-binding server_status --region=europe-west1 --member=allUsers --role=roles/cloudfunctions.invoker
gcloud alpha functions add-iam-policy-binding stop_server --region=europe-west1 --member=allUsers --role=roles/cloudfunctions.invoker
gcloud alpha functions add-iam-policy-binding start_server --region=europe-west1 --member=allUsers --role=roles/cloudfunctions.invoker

About

Minecraft Server automation on GCP

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0