diff --git a/minecraft/.common/Makefile b/minecraft/.common/Makefile deleted file mode 100644 index 0792771..0000000 --- a/minecraft/.common/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -SHELL := /bin/bash - -IMAGE ?= $(shell cat IMAGE):$(shell cat VERSION) -IMAGE_LATEST ?= $(shell cat IMAGE):latest -PWD ?= $(shell pwd) - -.PHONY: buildx-context -buildx-context: - docker buildx create --name arm64 --use --platform linux/amd64,linux/arm64 - -.PHONY: buildx-clear -buildx-clear: - docker buildx rm arm64 - -.PHONY: build -build: - docker buildx build --load . -t $(IMAGE) - @docker buildx build --load . -t $(IMAGE_LATEST) - -.PHONY: push -push: - docker buildx build --platform linux/amd64 --push . -t $(IMAGE) - @docker buildx build --platform linux/amd64 --push . -t $(IMAGE_LATEST) - -.PHONY: run -run: - docker run -it -v $(PWD):/mc_data $(IMAGE) bash diff --git a/minecraft/.gitignore b/minecraft/.gitignore index adbb97d..fe29ac4 100644 --- a/minecraft/.gitignore +++ b/minecraft/.gitignore @@ -1 +1,2 @@ -data/ \ No newline at end of file +data/ +world/ diff --git a/minecraft/.gitlab/Makefile b/minecraft/.gitlab/Makefile new file mode 100644 index 0000000..3b79cc1 --- /dev/null +++ b/minecraft/.gitlab/Makefile @@ -0,0 +1,34 @@ +SHELL := /bin/bash + +PROJECT_NAME ?= $(shell git config --local remote.origin.url|sed -n 's#.*/\([^.]*\)\.git#\1#p') +VERSION ?= $(shell cat VERSION) +IMAGE ?= $(shell cat IMAGE):$(VERSION) +IMAGE_LATEST ?= $(shell cat IMAGE):latest +PWD ?= $(shell pwd) +STASH ?= "common-update-stash" + +include .gitlab/make/docker.makefile +include .gitlab/make/helm.makefile +include .gitlab/make/kaniko.makefile +include .gitlab/make/truenas.makefile +include .gitlab/make/git.makefile + +.PHONY: warning +warning: + @printf "Running a potentially destructive command. If a conflict occurs, fix the conflict and re-run the command.\n" + @printf "Cancel with ctrl + c within 3 seconds." + @sleep 3 + +.PHONY: make-stash-drop +make-stash-drop: + @if [ ! -z "$$(git stash list | grep -r 'stash@{0}.*common')" ]; then git stash drop; fi + +.PHONY: make-update +make-update: + @git subtree pull --prefix .gitlab --message "Merge update from Common" -q common main + +.PHONY: make-push +make-push: warning + @make make-update + @git subtree split --branch common/$(PROJECT_NAME) --prefix .gitlab + @git push common common/$(PROJECT_NAME):common/$(PROJECT_NAME) diff --git a/minecraft/.gitlab/README.md b/minecraft/.gitlab/README.md new file mode 100644 index 0000000..aa433cb --- /dev/null +++ b/minecraft/.gitlab/README.md @@ -0,0 +1,10 @@ +# Adding the "common" subtree as your .gitlab folder + +```bash +# Add the subtree as a remote +git remote add common git@gitlab.ducoterra.net:services/common.git +git subtree add --prefix .gitlab common main + +# Now you can run the following to update +make make-update +``` diff --git a/minecraft/.gitlab/make/docker.makefile b/minecraft/.gitlab/make/docker.makefile new file mode 100644 index 0000000..23e4a52 --- /dev/null +++ b/minecraft/.gitlab/make/docker.makefile @@ -0,0 +1,29 @@ +.PHONY: docker-init +docker-init: + @touch VERSION + @touch IMAGE + +.PHONY: buildx-context +buildx-context: + docker buildx create --name container-builder --use --platform linux/amd64,linux/arm64 + +.PHONY: buildx-clear +buildx-clear: + docker buildx rm container-builder + +.PHONY: build +build: + docker buildx build --load . -t $(IMAGE) + @docker buildx build --load . -t $(IMAGE_LATEST) + +.PHONY: push +push: + -make buildx-clear + @make buildx-context + docker buildx build --platform linux/amd64,linux/arm64 --push . -t $(IMAGE) + @docker buildx build --platform linux/amd64,linux/arm64 --push . -t $(IMAGE_LATEST) + +.PHONY: docker-release +docker-release: + @yq e ".services.minecraft.image = \"$(IMAGE)\"" -i docker-compose.yaml + @make push diff --git a/minecraft/.gitlab/make/git.makefile b/minecraft/.gitlab/make/git.makefile new file mode 100644 index 0000000..f80a243 --- /dev/null +++ b/minecraft/.gitlab/make/git.makefile @@ -0,0 +1,5 @@ +.PHONY: git-release +git-release: + @git add . + @git commit -m "Automated release for version $(VERSION)" + @git tag $(VERSION) diff --git a/minecraft/.gitlab/make/helm.makefile b/minecraft/.gitlab/make/helm.makefile new file mode 100644 index 0000000..f603af4 --- /dev/null +++ b/minecraft/.gitlab/make/helm.makefile @@ -0,0 +1,4 @@ +.PHONY: helm-release +helm-release: + @yq e ".version = \"$(shell cat VERSION)\"" -i helm/Chart.yaml + @yq e ".appVersion = \"$(shell cat VERSION)\"" -i helm/Chart.yaml diff --git a/minecraft/.gitlab/make/kaniko.makefile b/minecraft/.gitlab/make/kaniko.makefile new file mode 100644 index 0000000..e69de29 diff --git a/minecraft/.gitlab/make/truenas.makefile b/minecraft/.gitlab/make/truenas.makefile new file mode 100644 index 0000000..c6fb58c --- /dev/null +++ b/minecraft/.gitlab/make/truenas.makefile @@ -0,0 +1,3 @@ +.PHONY: chart-release +chart-release: + @rsync -av $(CHART)/helm/ charts/$(CHART)/$(shell cat $(CHART)/VERSION)/ diff --git a/minecraft/Makefile b/minecraft/Makefile index c114817..996a6d2 100644 --- a/minecraft/Makefile +++ b/minecraft/Makefile @@ -1 +1,13 @@ -include .common/Makefile +SHELL := /bin/bash + +include .gitlab/Makefile + +.PHONY: get-server +get-server: + @mkdir -p world + @echo 'eula=true' > world/eula.txt + @docker run -it -e SERVER_VERSION=1.17.1 -v $(PWD)/world:/downloads ducoterra/get-minecraft:latest + +.PHONY: run +run: + docker-compose run --service-ports minecraft diff --git a/minecraft/README.md b/minecraft/README.md index 7249982..81bb2a4 100644 --- a/minecraft/README.md +++ b/minecraft/README.md @@ -1,61 +1,34 @@ # Minecraft -## Getting server.jar - -![Click Installations](img/main.png) -![Select the Options Menu](img/menu.png) -![Click Edit](img/edit.png) -![Click Download Server](img/server.png) - ## Running Locally ```bash -docker-compose build minecraft -docker-compose up minecraft +# download the most recent version of minecraft +make get-server + +# Run the server +docker-compose up ``` ## Uploading to Docker Hub -In docker-compose.yaml, update the image tag to: +1. Update the version in the VERSION file. +2. Build and push the new version -```yaml -... -services: - minecraft: - build: . - image: /minecraft:-1 - ports: -... -``` - -then run - -```bash -docker-compose push -``` + ```bash + make build + make push + ``` ## Running in kubernetes -In k8s/deploy.yaml, edit the deploy - -```yaml -... - spec: - containers: - - name: minecraft - image: - ports: -... -``` - -Then run the following +Requires helm v3. Edit values.yaml and run the following: ```bash -kubectl apply -f k8s/pvc -kubectl apply -f k8s +helm upgrade --install minecraft ``` -Your minecraft server will be available on port 25565 +Your minecraft server will be available on port 25565 by default. ## Create a Backup diff --git a/minecraft/VERSION b/minecraft/VERSION index 3eefcb9..6d7de6e 100644 --- a/minecraft/VERSION +++ b/minecraft/VERSION @@ -1 +1 @@ -1.0.0 +1.0.2 diff --git a/minecraft/docker-compose.yaml b/minecraft/docker-compose.yaml new file mode 100644 index 0000000..527768a --- /dev/null +++ b/minecraft/docker-compose.yaml @@ -0,0 +1,13 @@ +version: '3' +services: + minecraft: + image: ducoterra/minecraft:1.0.2 + stdin_open: true + tty: true + volumes: + - ./world:/mc_data + ports: + - 25565:25565 + environment: + - MAX_RAM=1 + - MIN_RAM=1 diff --git a/minecraft/helm/Chart.yaml b/minecraft/helm/Chart.yaml index 6e2f7cd..f83145a 100644 --- a/minecraft/helm/Chart.yaml +++ b/minecraft/helm/Chart.yaml @@ -1,7 +1,6 @@ apiVersion: v2 name: minecraft description: A Minecraft server for kubernetes - # A chart can be either an 'application' or a 'library' chart. # # Application charts are a collection of templates that can be packaged into versioned archives @@ -11,13 +10,11 @@ description: A Minecraft server for kubernetes # a dependency of application charts to inject those utilities and functions into the rendering # pipeline. Library charts do not define any templates and therefore cannot be deployed. type: application - # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.1.0 - +version: 1.0.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 1.0.0 +appVersion: 1.0.2 diff --git a/minecraft/helm/templates/deploy.yaml b/minecraft/helm/templates/deploy.yaml index e6a0c7e..a5872ad 100644 --- a/minecraft/helm/templates/deploy.yaml +++ b/minecraft/helm/templates/deploy.yaml @@ -23,13 +23,6 @@ spec: volumeMounts: - mountPath: /downloads name: data - - name: download-server - image: {{ .Values.get_server.image }} - imagePullPolicy: Always - command: ["bash", "-c", "curl -o server.jar $(cat SERVER_VERSION)"] - volumeMounts: - - mountPath: /downloads - name: data containers: - name: {{ .Release.Name }} image: {{ .Values.image }} diff --git a/minecraft/helm/values.yaml b/minecraft/helm/values.yaml index 01943f6..bb1d9ab 100644 --- a/minecraft/helm/values.yaml +++ b/minecraft/helm/values.yaml @@ -1,6 +1,6 @@ image: ducoterra/minecraft:latest get_server: - image: ducoterra/get-minecraft:latest + image: ducoterra/get-minecraft:2.0.0 server_version: "1.17.1" port: 20101 max_cpu: 4