diff --git a/options/podman.nix b/options/podman.nix index 80964d5..3834d19 100644 --- a/options/podman.nix +++ b/options/podman.nix @@ -13,6 +13,7 @@ in redmage-demo.enable = lib.mkEnableOption "redmage-demo podman"; qbittorrent.enable = lib.mkEnableOption "qbittorrent podman"; openobserve.enable = lib.mkEnableOption "openobserve podman"; + minecraft.enable = mkEnableOption "minecraft server podman"; servarr = { enable = mkEnableOption "servarr group"; diff --git a/profiles/homeserver.nix b/profiles/homeserver.nix index 7948e50..1002fca 100644 --- a/profiles/homeserver.nix +++ b/profiles/homeserver.nix @@ -37,6 +37,7 @@ servarr.real-debrid-manager.enable = false; servarr.rdtclient.enable = true; openobserve.enable = true; + minecraft.enable = true; }; docker = { diff --git a/system/podman/default.nix b/system/podman/default.nix index c4063fe..4aae289 100644 --- a/system/podman/default.nix +++ b/system/podman/default.nix @@ -41,6 +41,7 @@ in # 10.88.0.6 -> Suwayomi Flaresolverr # 10.88.1.1 -> Pihole imports = [ + ./minecraft.nix ./openobserve.nix ./pihole.nix ./qbittorrent.nix diff --git a/system/podman/minecraft.nix b/system/podman/minecraft.nix new file mode 100644 index 0000000..f6effd5 --- /dev/null +++ b/system/podman/minecraft.nix @@ -0,0 +1,75 @@ +{ config, lib, ... }: +let + name = "minecraft"; + podman = config.profile.podman; + inherit (lib) mkIf; + ip = "10.88.200.1"; + image = "docker.io/05jchambers/legendary-minecraft-purpur-geyser:latest"; + rootVolume = "/nas/podman/minecraft"; + domain = "${name}.tigor.web.id"; + user = config.profile.user; + uid = toString user.uid; + gid = toString user.gid; +in +{ + config = mkIf (podman.enable && podman.${name}.enable) { + services.caddy.virtualHosts.${domain}.extraConfig = /*html*/ '' + header Content-Type text/html + respond < + + + Minecraft Server + + +

Congrats! The minecraft server should be up!

+

+ For security reasons, connecting to the server requires Wireguard to be connected. + Ensure they are on first otherwise you won't be able to connect. +

+

+ The server supports both Java and Bedrock Edition. Both shares the same world and can + play together. They only need to connect to different ports depending on the edition. +

+

Minecraft Java Server: ${domain}:25565

+

Minecraft Bedrock Server: ${domain}:19132

+ + + EOF 200 + ''; + + system.activationScripts."podman-${name}" = '' + mkdir -p ${rootVolume} + chown ${uid}:${gid} ${rootVolume} + ''; + + virtualisation.oci-containers.containers.${name} = { + inherit image; + hostname = name; + autoStart = true; + user = "${uid}:${gid}"; + environment = { + TZ = "Asia/Jakarta"; + }; + ports = [ + # Java Edition Ports + "25565:25565/udp" + "25565:25565" + # Bedrock Edition Ports + "19132:19132/udp" + "19132:19132" + ]; + volumes = [ + "${rootVolume}:/minecraft" + ]; + extraOptions = [ + "--network=podman" + "--ip=${ip}" + ]; + labels = { + "io.containers.autoupdate" = "registry"; + }; + }; + }; + +}