From 0864aaa62ec08c97b0d85a8150e559bd84fac034 Mon Sep 17 00:00:00 2001 From: ducoterra Date: Mon, 13 Dec 2021 15:14:14 -0500 Subject: [PATCH] Squashed '.gitlab/' changes from 16ee2f3..fe577bf fe577bf remove old forge versions before unzipping 6c4354d Automated release for version 1.0.1 6fd156e genericize the container run commands by normalizing file names b776273 add update-version, remove get-server 4488fbf move values to helm/values.yaml dad1e4c sync versions to chart.yaml a171258 remove truenas chart stuff 84abbd4 Merge update from Common a13cfe6 Squashed '.gitlab/' changes from 6430416..16ee2f3 8b0a8fa setenv is deprecated 6213e7f pin FROM to use 8-jdk-bullseye 9dc2f0e switch to correct image in docker-compose b0991ea ignore versions folder where we keep pack zip files f8fc83b remove default values e2c677b add unzip and copy properties init container, don't mount properties d118b2d add the-1122-pack values a280110 Squashed '.gitlab/' changes from cf41f2e..6430416 6d11fde Merge update from Common 4497566 Squashed '.gitlab/' changes from 731ada6..cf41f2e 0520668 Merge update from Common 2de53de Remove .common a85a7aa Merge branch 'common-subtree' a074005 Add '.gitlab/' from commit '731ada6a3d65b2347ccf204cfe09ee278a4f0594' 422f4d4 remove .gitlab subtree a5aa0ca Automated release for version 1.0.2 65b3a84 make subtree "split" overhaul d181d45 Overhaul for get-server v. 2.0.0 0d2235b Merge branch 'common-makefile' into 'master' dbe0d47 Merge branch 'master' into 'common-makefile' c7c547c Switch to common Makefile a403f6f Merge commit '32cd04c7ec7aacf8e3a402e3aed310a6ea94b586' as '.common' 32cd04c Squashed '.common/' content from commit f187522 8d190e4 Add minecraft logo ba5ab53 Allow custom server versions a820e9a Allow custom server versions 9e788ee Add IMAGE and VERSION files d3b0f86 Switch to openjdk-latest and don't copy server.jar 2f7d4c7 Add Makefile aa253e6 Remove server.jar and docker-compose.yaml 773c1d6 Move install-specific values to a values folder dae5a09 Fix RAM issue with deploy 44053ab truenas compatibility update 807b186 set memory requirements to avoid sudden container death 99666ba add setenv 1b6b8bb update RAM for new cluster 95c7fa7 merge templates 7e0ff9e upgrade to 1.6.4 12fa8ec remove extra opts and remove threading 7d34b3a add charts for each server 95b0bd6 switch to configmap model ff2c9af servers to nvme 1dfb1f6 nvme for minecraft 3faf5c9 don't auto deploy 072bee6 update to 1.16.1 e6a0429 fix port issue 7df518d set image ca4d1ee use tag in deploy 1ccc5cd fix tags 3ce71a6 add gitlab ci 151867f switch back to minecraft 1.15.2 abc90be add images b727538 upgrade to 20w12a 17b0594 upgrade to 20w12a 9929e5d upgrade to 20w12a 00386c7 just copy files to mc_data 0c75d91 switch to ducoterra namespace 8bdae44 add README for backups 6264d75 set namespace to minecraft f59775d use a loadbalancer e54fdbe update IP 22987e0 comment horrible CMD 38b9dff add server.properties and update k8s with ram env da7cb2c add ram env 53e37ba switch to java 8 and only copy files that exist 0253598 add build script 095bbaa init REVERT: 16ee2f3 Merge branch 'various-docker-fixes' into 'main' REVERT: 5b3e196 fix docker build and remove release REVERT: 4bf9d45 Merge branch 'prefix-docker-commands' into 'main' REVERT: 91b77b3 don't reset head after subtree pull, it breaks things REVERT: 66b4362 prefix all docker commands with docker- REVERT: ba2827a Merge branch 'allow-specify-branch' into 'main' REVERT: 4de5558 ignore .gitlab REVERT: 71ff227 Allow pulling specific branch with BRANCH_NAME REVERT: 6430416 Merge branch 'add-helm-and-kube' into 'main' REVERT: bce675f Add install, upgrade, and uninstall for helm REVERT: 1532f30 Add kubectl.makefile REVERT: cf41f2e Merge branch 'remove-push' into 'main' REVERT: ef81c95 Remove unused commands REVERT: 81c19cc Don't use remote common REVERT: ea1e248 Update subtree add README REVERT: 756cc8c Remove make-push REVERT: a4b7e34 Squash subtree on pull REVERT: 524c5be Fix PROJECT_NAME variable REVERT: 47dea48 Add automated commit to chart-release git-subtree-dir: .gitlab git-subtree-split: fe577bfc4c48c4a5b02a50f7c81b4309a8876209 --- .gitignore | 4 +- .gitlab-ci.yml | 21 +++++++ .gitlab/.gitignore | 1 + .gitlab/Makefile | 21 +++++++ .gitlab/README.md | 9 +++ {make => .gitlab/make}/docker.makefile | 0 {make => .gitlab/make}/git.makefile | 0 {make => .gitlab/make}/helm.makefile | 0 {make => .gitlab/make}/kaniko.makefile | 0 {make => .gitlab/make}/kubectl.makefile | 0 {make => .gitlab/make}/truenas.makefile | 0 Dockerfile | 14 +++++ IMAGE | 1 + Makefile | 32 +++++----- README.md | 54 +++++++++++++++-- VERSION | 1 + docker-compose.yaml | 13 ++++ helm/.helmignore | 23 +++++++ helm/Chart.yaml | 20 +++++++ helm/templates/configmap.yaml | 8 +++ helm/templates/deploy.yaml | 80 +++++++++++++++++++++++++ helm/templates/pvc.yaml | 12 ++++ helm/templates/service.yaml | 12 ++++ helm/values.yaml | 42 +++++++++++++ servers.md | 19 ++++++ 25 files changed, 364 insertions(+), 23 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 .gitlab/.gitignore create mode 100644 .gitlab/Makefile create mode 100644 .gitlab/README.md rename {make => .gitlab/make}/docker.makefile (100%) rename {make => .gitlab/make}/git.makefile (100%) rename {make => .gitlab/make}/helm.makefile (100%) rename {make => .gitlab/make}/kaniko.makefile (100%) rename {make => .gitlab/make}/kubectl.makefile (100%) rename {make => .gitlab/make}/truenas.makefile (100%) create mode 100644 Dockerfile create mode 100644 IMAGE create mode 100644 VERSION create mode 100644 docker-compose.yaml create mode 100644 helm/.helmignore create mode 100644 helm/Chart.yaml create mode 100644 helm/templates/configmap.yaml create mode 100644 helm/templates/deploy.yaml create mode 100644 helm/templates/pvc.yaml create mode 100644 helm/templates/service.yaml create mode 100644 helm/values.yaml create mode 100644 servers.md diff --git a/.gitignore b/.gitignore index 3bbaaed..ad8082c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -.gitlab +data/ +world/ +versions/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..1abb03c --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,21 @@ +variables: + CI_PROJECT_NAME: "minecraft" + CI_PROJECT_DIR: "." + CI_REGISTRY_IMAGE: hub.ducoterra.net/ducoterra/minecraft + +stages: + - build + - test + - deploy + +build: + only: + variables: + - $CI_COMMIT_TAG + stage: build + image: + name: gcr.io/kaniko-project/executor:debug + entrypoint: [""] + script: + - echo $DEPLOY + - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG \ No newline at end of file diff --git a/.gitlab/.gitignore b/.gitlab/.gitignore new file mode 100644 index 0000000..3bbaaed --- /dev/null +++ b/.gitlab/.gitignore @@ -0,0 +1 @@ +.gitlab diff --git a/.gitlab/Makefile b/.gitlab/Makefile new file mode 100644 index 0000000..f5ca9c1 --- /dev/null +++ b/.gitlab/Makefile @@ -0,0 +1,21 @@ +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" +MAKE_BRANCH ?= main + +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 +include .gitlab/make/kubectl.makefile + +# git subtree add --prefix .gitlab --squash --message "Merge update from Common" -q git@gitlab.ducoterra.net:services/common.git main +.PHONY: make-update +make-update: + @git subtree pull --prefix .gitlab --squash --message "Merge update from Common" -q git@gitlab.ducoterra.net:services/common.git $(MAKE_BRANCH) diff --git a/.gitlab/README.md b/.gitlab/README.md new file mode 100644 index 0000000..5680c6b --- /dev/null +++ b/.gitlab/README.md @@ -0,0 +1,9 @@ +# Adding the "common" subtree as your .gitlab folder + +```bash +# Add the subtree as a remote +git subtree add --prefix .gitlab git@gitlab.ducoterra.net:services/common.git main --squash --message "Add Common .gitlab Subtree" + +# Now you can run the following to update +make make-update +``` diff --git a/make/docker.makefile b/.gitlab/make/docker.makefile similarity index 100% rename from make/docker.makefile rename to .gitlab/make/docker.makefile diff --git a/make/git.makefile b/.gitlab/make/git.makefile similarity index 100% rename from make/git.makefile rename to .gitlab/make/git.makefile diff --git a/make/helm.makefile b/.gitlab/make/helm.makefile similarity index 100% rename from make/helm.makefile rename to .gitlab/make/helm.makefile diff --git a/make/kaniko.makefile b/.gitlab/make/kaniko.makefile similarity index 100% rename from make/kaniko.makefile rename to .gitlab/make/kaniko.makefile diff --git a/make/kubectl.makefile b/.gitlab/make/kubectl.makefile similarity index 100% rename from make/kubectl.makefile rename to .gitlab/make/kubectl.makefile diff --git a/make/truenas.makefile b/.gitlab/make/truenas.makefile similarity index 100% rename from make/truenas.makefile rename to .gitlab/make/truenas.makefile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0d12498 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM openjdk:8-jdk-bullseye + +RUN apt update && apt install -y unzip + +RUN groupadd -r minecraft -g 2000 +RUN useradd --no-log-init minecraft -u 2000 -g 2000 -m +WORKDIR /mc_data +RUN chown -R minecraft:minecraft . + +# Copy the modpack +COPY versions/the-1122-pack_1.3.7.1.zip /the-1122-pack/the-1122-pack.zip +RUN chown -R minecraft:minecraft /the-1122-pack + +USER minecraft diff --git a/IMAGE b/IMAGE new file mode 100644 index 0000000..30eb29f --- /dev/null +++ b/IMAGE @@ -0,0 +1 @@ +ducoterra/the-1122-pack diff --git a/Makefile b/Makefile index f5ca9c1..29f2834 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,19 @@ 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" -MAKE_BRANCH ?= main +include .gitlab/Makefile -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 -include .gitlab/make/kubectl.makefile +.PHONY: run +run: + docker-compose run --service-ports minecraft -# git subtree add --prefix .gitlab --squash --message "Merge update from Common" -q git@gitlab.ducoterra.net:services/common.git main -.PHONY: make-update -make-update: - @git subtree pull --prefix .gitlab --squash --message "Merge update from Common" -q git@gitlab.ducoterra.net:services/common.git $(MAKE_BRANCH) +.PHONY: update-version +update-version: +ifdef VERSION + @echo $(VERSION) > VERSION + @yq e ".version = \"$(VERSION)\"" -i helm/Chart.yaml + @yq e ".appVersion = \"$(VERSION)\"" -i helm/Chart.yaml + @yq e ".services.*.image = \"$(IMAGE)\"" -i docker-compose.yaml + @yq e ".image = \"$(IMAGE)\"" -i helm/values.yaml +else + @echo 'VERSION not defined or VERSION file not found/empty' +endif diff --git a/README.md b/README.md index 5680c6b..81bb2a4 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,53 @@ -# Adding the "common" subtree as your .gitlab folder +# Minecraft + +## Running Locally ```bash -# Add the subtree as a remote -git subtree add --prefix .gitlab git@gitlab.ducoterra.net:services/common.git main --squash --message "Add Common .gitlab Subtree" +# download the most recent version of minecraft +make get-server -# Now you can run the following to update -make make-update +# Run the server +docker-compose up ``` + +## Uploading to Docker Hub + +1. Update the version in the VERSION file. +2. Build and push the new version + + ```bash + make build + make push + ``` + +## Running in kubernetes + +Requires helm v3. Edit values.yaml and run the following: + +```bash +helm upgrade --install minecraft +``` + +Your minecraft server will be available on port 25565 by default. + +## Create a Backup + +```bash +kubectl cp :/mc_data +``` + +## Restore from Backup + +```bash +kubectl cp :/mc_data +``` + +## Cool seeds + +### 7485786574821478084 + +Spawns you next to a nether portal with golden axe and pickaxe. River and Village close by. + +### -8018833100564192815 + +Use with an amplified world, massive island diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..7dea76e --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.1 diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..f631875 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,13 @@ +version: '3' +services: + minecraft: + image: ducoterra/the-1122-pack:1.0.1 + stdin_open: true + tty: true + volumes: + - ./world:/mc_data + ports: + - 25565:25565 + environment: + - MAX_RAM=1 + - MIN_RAM=1 diff --git a/helm/.helmignore b/helm/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/helm/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/helm/Chart.yaml b/helm/Chart.yaml new file mode 100644 index 0000000..5815e8d --- /dev/null +++ b/helm/Chart.yaml @@ -0,0 +1,20 @@ +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 +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# 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.0.1 +# 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.1 diff --git a/helm/templates/configmap.yaml b/helm/templates/configmap.yaml new file mode 100644 index 0000000..43a784a --- /dev/null +++ b/helm/templates/configmap.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }} +data: + eula.txt: | + eula=true + server.properties: {{ toYaml .Values.server_props | indent 2 }} \ No newline at end of file diff --git a/helm/templates/deploy.yaml b/helm/templates/deploy.yaml new file mode 100644 index 0000000..075e755 --- /dev/null +++ b/helm/templates/deploy.yaml @@ -0,0 +1,80 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }} +spec: + selector: + matchLabels: + app: {{ .Release.Name }} + strategy: + type: Recreate + template: + metadata: + labels: + app: {{ .Release.Name }} + spec: + initContainers: + - name: unzip + image: {{ .Values.image }} + imagePullPolicy: Always + command: ["/bin/bash"] + args: ["-c", "rm -f forge*.jar && unzip -o -d . /the-1122-pack/the-1122-pack.zip"] + volumeMounts: + - mountPath: /mc_data + name: data + - name: rename + image: {{ .Values.image }} + imagePullPolicy: Always + command: ["/bin/bash"] + args: ["-c", "mv $(find . -maxdepth 1 -name 'forge*.jar') forge.jar"] + volumeMounts: + - mountPath: /mc_data + name: data + - name: copy-properties + image: debian:latest + imagePullPolicy: Always + command: ["/bin/bash"] + args: ["-c", "cp -f /server.properties /mc_data/server.properties"] + volumeMounts: + - mountPath: /mc_data + name: data + - name: properties + mountPath: /server.properties + subPath: server.properties + containers: + - name: server + image: {{ .Values.image }} + imagePullPolicy: Always + command: ["/bin/bash"] + args: ["-c", 'java -server -Xmx"$MAX_RAM"G -Dfml.queryResult=confirm -jar forge.jar nogui'] + ports: + - containerPort: 25565 + volumeMounts: + - mountPath: /mc_data + name: data + - name: properties + mountPath: /mc_data/eula.txt + subPath: eula.txt + tty: true + stdin: true + env: + - name: MAX_RAM + value: {{ .Values.max_ram | quote }} + - name: MIN_RAM + value: "1" + resources: + requests: + memory: {{ div .Values.max_ram 2 }}Gi + cpu: 1m + limits: + memory: {{ add 1 .Values.max_ram }}Gi + cpu: {{ .Values.max_cpu | quote }} + volumes: + - name: data + persistentVolumeClaim: + claimName: {{ .Release.Name }} + - name: properties + configMap: + name: {{ .Release.Name }} + securityContext: + fsGroup: 2000 diff --git a/helm/templates/pvc.yaml b/helm/templates/pvc.yaml new file mode 100644 index 0000000..e825a00 --- /dev/null +++ b/helm/templates/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Release.Name }} + annotations: + "helm.sh/resource-policy": keep +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 32Gi \ No newline at end of file diff --git a/helm/templates/service.yaml b/helm/templates/service.yaml new file mode 100644 index 0000000..eade03e --- /dev/null +++ b/helm/templates/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }} +spec: + selector: + app: {{ .Release.Name }} + ports: + - port: {{ .Values.port }} + targetPort: 25565 + name: {{ .Release.Name }} + type: LoadBalancer \ No newline at end of file diff --git a/helm/values.yaml b/helm/values.yaml new file mode 100644 index 0000000..3d20259 --- /dev/null +++ b/helm/values.yaml @@ -0,0 +1,42 @@ +image: ducoterra/the-1122-pack:1.0.1 +port: 20102 +max_cpu: 4 +max_ram: 6 +server_props: | + max-tick-time=-1 + query.port=25565 + generator-settings= + force-gamemode=false + allow-nether=true + gamemode=0 + enable-query=true + player-idle-timeout=0 + difficulty=1 + spawn-monsters=true + op-permission-level=4 + pvp=true + snooper-enabled=true + level-type=BIOMESOP + hardcore=false + enable-command-block=false + max-players=10 + network-compression-threshold=256 + resource-pack-sha1= + max-world-size=29999984 + server-port=25565 + server-ip=0.0.0.0 + spawn-npcs=true + allow-flight=true + level-name=world + view-distance=24 + resource-pack= + spawn-animals=true + white-list=true + generate-structures=true + online-mode=true + max-build-height=256 + level-seed= + prevent-proxy-connections=false + use-native-transport=true + enable-rcon=false + motd=\u00A7lThe 1.12.2 Pack Server v1.3.7 diff --git a/servers.md b/servers.md new file mode 100644 index 0000000..67a699d --- /dev/null +++ b/servers.md @@ -0,0 +1,19 @@ +# Servers + +## Minecraft + +```bash +helm upgrade --install minecraft ./helm --set tag=1.15.2_7 --set port=25565 +``` + +## Pubcraft + +```bash +helm upgrade --install pubcraft ./helm --set tag=1.15.2_7 --set port=20100 +``` + +## TestCraft + +```bash +helm upgrade --install testcraft ./helm --set tag=1.16.1_2 --set port=25566 +```