Merge "cluster/rook: bump to 1.1.9"
diff --git a/personal/q3k/minecraft/Dockerfile-vanilla b/personal/q3k/minecraft/Dockerfile-vanilla
new file mode 100644
index 0000000..9ba7478
--- /dev/null
+++ b/personal/q3k/minecraft/Dockerfile-vanilla
@@ -0,0 +1,43 @@
+FROM ubuntu:20.04
+
+RUN set -e -x ;\
+ export DEBIAN_FRONTEND=noninteractive ;\
+ apt-get -y update ;\
+ apt-get -y upgrade ;\
+ apt-get -y install git openjdk-8-jre-headless wget
+
+RUN set -e -x ;\
+ export DEBIAN_FRONTEND=noninteractive ;\
+ apt-get -y install build-essential python3-dev python3-pil python3-numpy ;\
+ mkdir overviewer ;\
+ cd overviewer ;\
+ wget --quiet https://github.com/overviewer/Minecraft-Overviewer/archive/v0.15.0.tar.gz ;\
+ tar xvf *.tar.gz ;\
+ cd Minecraft-Overviewer* ;\
+ python3 setup.py build ;\
+ python3 setup.py install ;\
+ cd ../.. ;\
+ rm -rf overviewer ;\
+ apt-get -y purge python3-dev build-essential
+
+
+RUN set -e -x ;\
+ useradd -rm minecraft
+
+USER minecraft
+WORKDIR /home/minecraft
+
+RUN set -e -x ;\
+ mkdir build ;\
+ cd build ;\
+ wget --quiet https://hub.spigotmc.org/jenkins/job/BuildTools/112/artifact/target/BuildTools.jar ;\
+ java -jar BuildTools.jar --rev 1.15.2 ;\
+ cp spigot*jar .. ;\
+ cd .. ;\
+ rm -rf build ;\
+ mv spigot*.jar spigot.jar
+
+RUN set -e -x ;\
+ VERSION=1.15.2 ;\
+ mkdir -p /home/minecraft/.minecraft/versions/${VERSION}/ ;\
+ wget --quiet https://overviewer.org/textures/${VERSION} -O /home/minecraft/.minecraft/versions/${VERSION}/${VERSION}.jar
diff --git a/personal/q3k/minecraft/prod.jsonnet b/personal/q3k/minecraft/prod.jsonnet
new file mode 100644
index 0000000..a662cce
--- /dev/null
+++ b/personal/q3k/minecraft/prod.jsonnet
@@ -0,0 +1,188 @@
+local kube = import "../../../kube/kube.libsonnet";
+
+{
+ local minecraft = self,
+ versions:: {
+ "spigot-1.15.2": "registry.k0.hswaw.net/q3k/minecraft:spigot-1.15.2-r2",
+ },
+ server(name, version):: {
+ local server = self,
+ name:: name,
+ version:: version,
+ image:: minecraft.versions[server.version],
+
+ metadata:: {
+ namespace: "minecraft",
+ },
+
+ componentName(component):: "%s-%s" % [server.name, component],
+
+ properties:: {
+ "spawn-protection": 16,
+ "max-tick-time": 60000,
+ "query.port": 25565,
+ "generator-settings": "",
+ "force-gamemode": false,
+ "allow-nether": true,
+ "enforce-whitelist": false,
+ "gamemode": "survival",
+ "broadcast-console-to-ops": true,
+ "enable-query": false,
+ "player-idle-timeout": 0,
+ "difficulty": "easy",
+ "broadcast-rcon-to-ops": true,
+ "spawn-monsters": true,
+ "op-permission-level": 4,
+ "pvp": true,
+ "snooper-enabled": true,
+ "level-type": "default",
+ "hardcore": false,
+ "enable-command-block": false,
+ "network-compression-threshold": 256,
+ "max-players": 20,
+ "max-world-size": 29999984,
+ "resource-pack-sha1": "",
+ "function-permission-level": 2,
+ "rcon.port": 25575,
+ "server-port": 25565,
+ "debug": false,
+ "server-ip": "",
+ "spawn-npcs": true,
+ "allow-flight": false,
+ "level-name": "world",
+ "view-distance": 10,
+ "resource-pack": "",
+ "spawn-animals": true,
+ "white-list": false,
+ "rcon.password": "",
+ "generate-structures": true,
+ "online-mode": true,
+ "max-build-height": 256,
+ "level-seed": "",
+ "prevent-proxy-connections": false,
+ "use-native-transport": true,
+ "motd": "A Minecraft Server",
+ "enable-rcon": false,
+ },
+
+ startsh:: |||
+ #!/usr/bin/env bash
+ cd /home/minecraft/world
+ cp /home/minecraft/config/server.properties .
+ cp /home/minecraft/spigot.jar .
+ echo "eula=true" > eula.txt
+
+ bash /home/minecraft/config/overviewer.sh &
+ exec java -Xmx4G -Xms4G -jar spigot.jar
+ |||,
+
+ overviewersh:: |||
+ #!/usr/bin/env bash
+ mkdir -p overviewer/world
+ sleep 60
+ while true; do
+ echo "Rendering Overviewer map..."
+ overviewer.py -p 1 --rendermodes=normal,lighting,smooth-lighting,cave world overviewer/world
+ echo "Done."
+ sleep 900
+ done
+ |||,
+
+ secretProperties: kube.Secret(server.componentName("properties")) {
+ metadata+: server.metadata,
+ data: {
+ local properties = std.join("\n", ["%s=%s" % [k, std.toString(server.properties[k])] for k in std.objectFields(server.properties)]),
+ "server.properties": std.base64(properties),
+ "start.sh": std.base64(server.startsh),
+ "overviewer.sh": std.base64(server.overviewersh),
+ },
+ },
+
+ worldVolume: kube.PersistentVolumeClaim(server.componentName("world")) {
+ metadata+: server.metadata,
+ spec+: {
+ storageClassName: "waw-hdd-redundant-3",
+ accessModes: ["ReadWriteOnce"],
+ resources: {
+ requests: {
+ storage: "10Gi",
+ },
+ },
+ },
+ },
+
+ deploy: kube.Deployment(server.componentName("deploy")) {
+ metadata+: server.metadata,
+ spec+: {
+ template+: {
+ spec+: {
+ volumes_: {
+ config: kube.SecretVolume(server.secretProperties),
+ world: kube.PersistentVolumeClaimVolume(server.worldVolume),
+ },
+ containers_: {
+ default: kube.Container("default") {
+ image: server.image,
+ command: [
+ "bash", "/home/minecraft/config/start.sh",
+ ],
+ volumeMounts_: {
+ config: { mountPath: "/home/minecraft/config" },
+ world: { mountPath: "/home/minecraft/world" },
+ },
+ ports_: {
+ minecraft: { containerPort: 25565 },
+ },
+ resources: {
+ requests: {
+ memory: "6G",
+ cpu: "2",
+ },
+ limits: {
+ memory: "6G",
+ cpu: "4",
+ },
+ },
+ },
+ overviewer: kube.Container("overviewer") {
+ image: "halverneus/static-file-server:v1.8.0",
+ env_: {
+ FOLDER: "/home/minecraft/world/overviewer/world",
+ },
+ volumeMounts_: {
+ world: { mountPath: "/home/minecraft/world" },
+ },
+ ports_: {
+ web: { containerPort: 8080 },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+
+ svc: kube.Service(server.componentName("svc")) {
+ metadata+: server.metadata,
+ target_pod:: server.deploy.spec.template,
+ spec+: {
+ ports: [
+ { name: "minecraft", port: 25565, targetPort: 25565, protocol: "TCP" },
+ { name: "web", port: 80, targetPort: 8080, protocol: "TCP" },
+ ],
+ type: "LoadBalancer",
+ externalTrafficPolicy: "Local",
+ },
+ },
+ },
+
+ ns: kube.Namespace("minecraft"),
+
+ q3k: {
+ survival: minecraft.server("q3k-survival", "spigot-1.15.2") {
+ properties+: {
+ motd: "wypierdol z polski kropka pe el",
+ },
+ },
+ },
+}