Implement Minecraft server

This commit is contained in:
Root User 2026-03-19 22:15:00 +01:00
parent 5a99568c60
commit ec50a86329
Signed by: root
GPG key ID: 087F0A95E5766D72
7 changed files with 324 additions and 11 deletions

View file

@ -7,7 +7,7 @@
choose = paths: builtins.head (builtins.filter (p: builtins.pathExists p) paths);
# Domain and Cloudflare DDNS records configured here. Update this list to add/remove records.
domain = "prg-radio.org";
records = ["git" "grafana" "anubis" "wavelog" "partdb" "mail" "mailadmin" "@" "test"];
records = ["git" "grafana" "anubis" "wavelog" "partdb" "mail" "mailadmin" "@" "test" "minecraft"];
recordsStr = lib.concatStringsSep " " records;
zoneId = "9fde8d0fa53502f2d1b7e0b1d3765d49";
envFile = "/home/traefikprg/cloudflare/cloudflare.env";
@ -292,6 +292,16 @@ in {
# implicit TLS IMAP (port 993) - passthrough to backend
address = "[::]:993";
};
# Minecraft TCP entrypoint (Minecraft Java Edition default port)
minecraft = {
address = "[::]:25565";
};
# Minecraft VoiceChat UDP entrypoint (VoiceChat mod default port)
minecraft-voice = {
address = "[::]:24454/udp";
};
};
log = {
level = "INFO";
@ -448,6 +458,13 @@ in {
mail-webadmin.loadBalancer = {
servers = [{url = "http://10.1.1.15:8081";}];
};
# Minecraft service (plain TCP on 25565)
minecraft.loadBalancer = {
servers = [
{url = "http://10.1.1.244:25565";}
];
};
};
# TCP routing for TeamSpeak
@ -509,6 +526,14 @@ in {
entryPoints = ["imaps"];
tls = {passthrough = true;};
};
# TCP router for Minecraft (plain TCP on 25565)
minecraft = {
# Use catch-all SNI rule because Minecraft clients don't use TLS/SNI
rule = "HostSNI(`*`)";
service = "minecraft";
entryPoints = ["minecraft"];
};
};
tcp.services = {
@ -543,6 +568,13 @@ in {
proxyProtocol = {version = 2;}; # Add this line
servers = [{address = "10.1.1.15:993";}];
};
# TCP service for Minecraft
minecraft.loadBalancer = {
servers = [
{address = "10.1.1.244:25565";}
];
};
};
# UDP routing for TeamSpeak voice
@ -551,6 +583,12 @@ in {
entryPoints = ["teamspeak-voice"];
service = "teamspeak-voice";
};
# UDP router for Minecraft VoiceChat mod
minecraft-voice = {
entryPoints = ["minecraft-voice"];
service = "minecraft-voice";
};
};
udp.services = {
@ -559,6 +597,12 @@ in {
{address = "10.1.1.248:9987";}
];
};
minecraft-voice.loadBalancer = {
servers = [
{address = "10.1.1.244:24454";}
];
};
};
};
};
@ -817,8 +861,8 @@ in {
systemd.services.prg-cloudflare-ddns-updater = {
description = "PRG Cloudflare DDNS updater";
after = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
after = ["network-online.target"];
wantedBy = ["multi-user.target"];
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.bash}/bin/bash /etc/cloudflare-ddns/update.sh";
@ -830,10 +874,10 @@ in {
systemd.timers.prg-cloudflare-ddns-updater = {
description = "Run PRG Cloudflare DDNS updater hourly";
wantedBy = [ "timers.target" ];
wantedBy = ["timers.target"];
timerConfig = {
OnBootSec = "1m"; # run shortly after boot
OnUnitActiveSec = "1h"; # then every hour
OnBootSec = "1m"; # run shortly after boot
OnUnitActiveSec = "1h"; # then every hour
AccuracySec = "1m";
};
};