Comment out 7DTD servers, not in use

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-07-10 23:14:44 +01:00
parent 38cf2ccd5a
commit 55bec881c3
4 changed files with 202 additions and 198 deletions

View file

@ -25,25 +25,26 @@ name = "SSH"
port = 22 port = 22
protocol = "tcp" protocol = "tcp"
[[forward]] # 7DTD forwards commented out — servers disabled in services/game-servers.nix.
name = "7DTD game" # [[forward]]
port = 26900 # name = "7DTD game"
protocol = "both" # port = 26900
# protocol = "both"
[[forward]] #
name = "7DTD voice/dynamic" # [[forward]]
ports = "26901-26902" # name = "7DTD voice/dynamic"
protocol = "udp" # ports = "26901-26902"
# protocol = "udp"
[[forward]] #
name = "7DTD-coop game" # [[forward]]
port = 26910 # name = "7DTD-coop game"
protocol = "both" # port = 26910
# protocol = "both"
[[forward]] #
name = "7DTD-coop voice/dynamic" # [[forward]]
ports = "26911-26912" # name = "7DTD-coop voice/dynamic"
protocol = "udp" # ports = "26911-26912"
# protocol = "udp"
[[forward]] [[forward]]
name = "Neko WebRTC" name = "Neko WebRTC"

View file

@ -30,7 +30,7 @@
{ domain = "frigate.nordhammer.it"; policy = "one_factor"; } { domain = "frigate.nordhammer.it"; policy = "one_factor"; }
{ domain = "camera.nordhammer.it"; policy = "one_factor"; } { domain = "camera.nordhammer.it"; policy = "one_factor"; }
{ domain = "homepage.nordhammer.it"; policy = "one_factor"; } { domain = "homepage.nordhammer.it"; policy = "one_factor"; }
{ domain = "7dtd.nordhammer.it"; policy = "one_factor"; } # { domain = "7dtd.nordhammer.it"; policy = "one_factor"; } # 7DTD disabled
{ domain = "adguard.nordhammer.it"; policy = "one_factor"; } { domain = "adguard.nordhammer.it"; policy = "one_factor"; }
{ domain = "sonarr.nordhammer.it"; policy = "one_factor"; } { domain = "sonarr.nordhammer.it"; policy = "one_factor"; }
{ domain = "radarr.nordhammer.it"; policy = "one_factor"; } { domain = "radarr.nordhammer.it"; policy = "one_factor"; }

View file

@ -1,191 +1,194 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
{ {
config = lib.mkIf (config.networking.hostName == "FredOS-Mediaserver") { config = lib.mkIf (config.networking.hostName == "FredOS-Mediaserver") {
# Kept even with 7DTD commented out: memos/profilarr containers rely on these.
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
virtualisation.oci-containers.backend = "docker";
systemd.tmpfiles.rules = [
"d /var/lib/7dtd 0755 root root -"
"d /var/lib/7dtd/saves 0755 root root -"
"d /var/lib/7dtd/serverfiles 0755 root root -"
"d /var/lib/7dtd/lgsm 0755 root root -"
"d /var/lib/7dtd/log 0755 root root -"
"d /var/lib/7dtd/backups 0755 root root -"
"d /var/lib/7dtd-coop 0755 root root -"
"d /var/lib/7dtd-coop/saves 0755 root root -"
"d /var/lib/7dtd-coop/serverfiles 0755 root root -"
"d /var/lib/7dtd-coop/lgsm 0755 root root -"
"d /var/lib/7dtd-coop/log 0755 root root -"
"d /var/lib/7dtd-coop/backups 0755 root root -"
];
## <----- 7 DAYS TO DIE ----> ## ## <----- 7 DAYS TO DIE ----> ##
virtualisation.oci-containers = { # Commented out 2026-07 — servers not in regular use. Saves remain in
backend = "docker"; # /var/lib/7dtd{,-coop}; uncomment below (and forwards in ports.toml)
containers."7dtd" = { # to bring them back.
image = "vinanrra/7dtd-server:latest";
volumes = [
"/var/lib/7dtd/saves:/home/sdtdserver/.local/share/7DaysToDie"
"/var/lib/7dtd/serverfiles:/home/sdtdserver/serverfiles"
"/var/lib/7dtd/lgsm:/home/sdtdserver/lgsm/config-lgsm/sdtdserver"
"/var/lib/7dtd/log:/home/sdtdserver/log"
"/var/lib/7dtd/backups:/home/sdtdserver/lgsm/backup"
];
ports = [
"26900:26900/tcp"
"26900:26900/udp"
"26901:26901/udp"
"26902:26902/udp"
# WebDashboard — localhost-only; nginx reverse-proxies it with Authelia
"127.0.0.1:8090:8080/tcp"
];
environment = {
START_MODE = "1";
VERSION = "stable";
TimeZone = "Europe/Stockholm";
TEST_ALERT = "NO";
};
};
containers."7dtd-coop" = { # systemd.tmpfiles.rules = [
image = "vinanrra/7dtd-server:latest"; # "d /var/lib/7dtd 0755 root root -"
volumes = [ # "d /var/lib/7dtd/saves 0755 root root -"
"/var/lib/7dtd-coop/saves:/home/sdtdserver/.local/share/7DaysToDie" # "d /var/lib/7dtd/serverfiles 0755 root root -"
"/var/lib/7dtd-coop/serverfiles:/home/sdtdserver/serverfiles" # "d /var/lib/7dtd/lgsm 0755 root root -"
"/var/lib/7dtd-coop/lgsm:/home/sdtdserver/lgsm/config-lgsm/sdtdserver" # "d /var/lib/7dtd/log 0755 root root -"
"/var/lib/7dtd-coop/log:/home/sdtdserver/log" # "d /var/lib/7dtd/backups 0755 root root -"
"/var/lib/7dtd-coop/backups:/home/sdtdserver/lgsm/backup" # "d /var/lib/7dtd-coop 0755 root root -"
]; # "d /var/lib/7dtd-coop/saves 0755 root root -"
ports = [ # "d /var/lib/7dtd-coop/serverfiles 0755 root root -"
"26910:26900/tcp" # "d /var/lib/7dtd-coop/lgsm 0755 root root -"
"26910:26900/udp" # "d /var/lib/7dtd-coop/log 0755 root root -"
"26911:26901/udp" # "d /var/lib/7dtd-coop/backups 0755 root root -"
"26912:26902/udp" # ];
"127.0.0.1:8091:8080/tcp"
];
environment = {
# Start-only. Serverfiles are seeded by rsync from the main 7dtd
# install — SteamCMD anonymous install fails on a fresh dir, so
# we share the binaries and skip the update path here. (Mode 2
# is "Update + STOP", mode 0/2/4 all stop after their action.)
START_MODE = "1";
VERSION = "stable";
TimeZone = "Europe/Stockholm";
TEST_ALERT = "NO";
};
};
};
systemd.services."7dtd-configure" = { # virtualisation.oci-containers.containers."7dtd" = {
description = "Patch 7DTD sdtdserver.xml on first install"; # image = "vinanrra/7dtd-server:latest";
after = [ "docker-7dtd.service" ]; # volumes = [
wants = [ "docker-7dtd.service" ]; # "/var/lib/7dtd/saves:/home/sdtdserver/.local/share/7DaysToDie"
wantedBy = [ "multi-user.target" ]; # "/var/lib/7dtd/serverfiles:/home/sdtdserver/serverfiles"
path = with pkgs; [ gnused coreutils systemd ]; # "/var/lib/7dtd/lgsm:/home/sdtdserver/lgsm/config-lgsm/sdtdserver"
script = '' # "/var/lib/7dtd/log:/home/sdtdserver/log"
MARKER=/var/lib/7dtd/.configured # "/var/lib/7dtd/backups:/home/sdtdserver/lgsm/backup"
CONFIG=/var/lib/7dtd/serverfiles/sdtdserver.xml # ];
if [ -f "$MARKER" ]; then # ports = [
echo "Already configured; skipping." # "26900:26900/tcp"
exit 0 # "26900:26900/udp"
fi # "26901:26901/udp"
echo "Waiting for $CONFIG (install can take 15+ minutes on first boot)..." # "26902:26902/udp"
for i in $(seq 1 180); do # # WebDashboard — localhost-only; nginx reverse-proxies it with Authelia
[ -f "$CONFIG" ] && break # "127.0.0.1:8090:8080/tcp"
sleep 10 # ];
done # environment = {
if [ ! -f "$CONFIG" ]; then # START_MODE = "1";
echo "Timed out waiting for $CONFIG; will retry next boot." # VERSION = "stable";
exit 1 # TimeZone = "Europe/Stockholm";
fi # TEST_ALERT = "NO";
# };
# };
set_prop() { # virtualisation.oci-containers.containers."7dtd-coop" = {
sed -i "s|<property name=\"$1\"[^/]*value=\"[^\"]*\"|<property name=\"$1\" value=\"$2\"|" "$CONFIG" # image = "vinanrra/7dtd-server:latest";
} # volumes = [
# "/var/lib/7dtd-coop/saves:/home/sdtdserver/.local/share/7DaysToDie"
# "/var/lib/7dtd-coop/serverfiles:/home/sdtdserver/serverfiles"
# "/var/lib/7dtd-coop/lgsm:/home/sdtdserver/lgsm/config-lgsm/sdtdserver"
# "/var/lib/7dtd-coop/log:/home/sdtdserver/log"
# "/var/lib/7dtd-coop/backups:/home/sdtdserver/lgsm/backup"
# ];
# ports = [
# "26910:26900/tcp"
# "26910:26900/udp"
# "26911:26901/udp"
# "26912:26902/udp"
# "127.0.0.1:8091:8080/tcp"
# ];
# environment = {
# # Start-only. Serverfiles are seeded by rsync from the main 7dtd
# # install — SteamCMD anonymous install fails on a fresh dir, so
# # we share the binaries and skip the update path here. (Mode 2
# # is "Update + STOP", mode 0/2/4 all stop after their action.)
# START_MODE = "1";
# VERSION = "stable";
# TimeZone = "Europe/Stockholm";
# TEST_ALERT = "NO";
# };
# };
set_prop ServerName "Nordhammer.it" # systemd.services."7dtd-configure" = {
set_prop ServerPassword "DaveSmells" # description = "Patch 7DTD sdtdserver.xml on first install";
set_prop GameWorld "RWG" # after = [ "docker-7dtd.service" ];
set_prop WorldGenSeed "Nordhammer" # wants = [ "docker-7dtd.service" ];
set_prop WorldGenSize "8192" # wantedBy = [ "multi-user.target" ];
set_prop GameName "Nordhammer" # path = with pkgs; [ gnused coreutils systemd ];
set_prop WebDashboardEnabled "true" # script = ''
set_prop EACEnabled "false" # MARKER=/var/lib/7dtd/.configured
set_prop StormFreq "0" # CONFIG=/var/lib/7dtd/serverfiles/sdtdserver.xml
# if [ -f "$MARKER" ]; then
# echo "Already configured; skipping."
# exit 0
# fi
# echo "Waiting for $CONFIG (install can take 15+ minutes on first boot)..."
# for i in $(seq 1 180); do
# [ -f "$CONFIG" ] && break
# sleep 10
# done
# if [ ! -f "$CONFIG" ]; then
# echo "Timed out waiting for $CONFIG; will retry next boot."
# exit 1
# fi
#
# set_prop() {
# sed -i "s|<property name=\"$1\"[^/]*value=\"[^\"]*\"|<property name=\"$1\" value=\"$2\"|" "$CONFIG"
# }
#
# set_prop ServerName "Nordhammer.it"
# set_prop ServerPassword "DaveSmells"
# set_prop GameWorld "RWG"
# set_prop WorldGenSeed "Nordhammer"
# set_prop WorldGenSize "8192"
# set_prop GameName "Nordhammer"
# set_prop WebDashboardEnabled "true"
# set_prop EACEnabled "false"
# set_prop StormFreq "0"
#
# touch "$MARKER"
# echo "Patched; restarting container to apply."
# systemctl restart docker-7dtd.service
# '';
# serviceConfig = {
# Type = "oneshot";
# RemainAfterExit = true;
# };
# };
touch "$MARKER" # systemd.services."7dtd-coop-configure" = {
echo "Patched; restarting container to apply." # description = "Patch 7DTD-coop sdtdserver.xml on first install";
systemctl restart docker-7dtd.service # after = [ "docker-7dtd-coop.service" ];
''; # wants = [ "docker-7dtd-coop.service" ];
serviceConfig = { # wantedBy = [ "multi-user.target" ];
Type = "oneshot"; # path = with pkgs; [ gnused coreutils systemd ];
RemainAfterExit = true; # script = ''
}; # MARKER=/var/lib/7dtd-coop/.configured
}; # CONFIG=/var/lib/7dtd-coop/serverfiles/sdtdserver.xml
# if [ -f "$MARKER" ]; then
# echo "Already configured; skipping."
# exit 0
# fi
# echo "Waiting for $CONFIG (install can take 15+ minutes on first boot)..."
# for i in $(seq 1 180); do
# [ -f "$CONFIG" ] && break
# sleep 10
# done
# if [ ! -f "$CONFIG" ]; then
# echo "Timed out waiting for $CONFIG; will retry next boot."
# exit 1
# fi
#
# set_prop() {
# sed -i "s|<property name=\"$1\"[^/]*value=\"[^\"]*\"|<property name=\"$1\" value=\"$2\"|" "$CONFIG"
# }
#
# set_prop ServerName "Nordhammer Co-op"
# set_prop ServerPassword "DaveSmells"
# set_prop ServerVisibility "0"
# set_prop ServerMaxPlayerCount "2"
# set_prop GameWorld "RWG"
# set_prop WorldGenSeed "NordhammerCoop"
# set_prop WorldGenSize "8192"
# set_prop GameName "NordhammerCoop"
# set_prop WebDashboardEnabled "true"
# set_prop EACEnabled "false"
# set_prop StormFreq "0"
#
# touch "$MARKER"
# echo "Patched; restarting container to apply."
# systemctl restart docker-7dtd-coop.service
# '';
# serviceConfig = {
# Type = "oneshot";
# RemainAfterExit = true;
# };
# };
systemd.services."7dtd-coop-configure" = { # # Stop 7DTD containers from crash-looping forever — after 5 failures
description = "Patch 7DTD-coop sdtdserver.xml on first install"; # # within 5 minutes, systemd gives up. Without this, a broken container
after = [ "docker-7dtd-coop.service" ]; # # spawns a new veth pair every 30 s, flooding systemd-networkd and
wants = [ "docker-7dtd-coop.service" ]; # # potentially interfering with DHCP on the WAN interface.
wantedBy = [ "multi-user.target" ]; # systemd.services."docker-7dtd".serviceConfig = {
path = with pkgs; [ gnused coreutils systemd ]; # Restart = lib.mkForce "on-failure";
script = '' # RestartSec = "30s";
MARKER=/var/lib/7dtd-coop/.configured # StartLimitIntervalSec = 300;
CONFIG=/var/lib/7dtd-coop/serverfiles/sdtdserver.xml # StartLimitBurst = 5;
if [ -f "$MARKER" ]; then # };
echo "Already configured; skipping." # systemd.services."docker-7dtd-coop".serviceConfig = {
exit 0 # Restart = lib.mkForce "on-failure";
fi # RestartSec = "30s";
echo "Waiting for $CONFIG (install can take 15+ minutes on first boot)..." # StartLimitIntervalSec = 300;
for i in $(seq 1 180); do # StartLimitBurst = 5;
[ -f "$CONFIG" ] && break # };
sleep 10
done
if [ ! -f "$CONFIG" ]; then
echo "Timed out waiting for $CONFIG; will retry next boot."
exit 1
fi
set_prop() {
sed -i "s|<property name=\"$1\"[^/]*value=\"[^\"]*\"|<property name=\"$1\" value=\"$2\"|" "$CONFIG"
}
set_prop ServerName "Nordhammer Co-op"
set_prop ServerPassword "DaveSmells"
set_prop ServerVisibility "0"
set_prop ServerMaxPlayerCount "2"
set_prop GameWorld "RWG"
set_prop WorldGenSeed "NordhammerCoop"
set_prop WorldGenSize "8192"
set_prop GameName "NordhammerCoop"
set_prop WebDashboardEnabled "true"
set_prop EACEnabled "false"
set_prop StormFreq "0"
touch "$MARKER"
echo "Patched; restarting container to apply."
systemctl restart docker-7dtd-coop.service
'';
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
};
};
# Stop 7DTD containers from crash-looping forever — after 5 failures
# within 5 minutes, systemd gives up. Without this, a broken container
# spawns a new veth pair every 30 s, flooding systemd-networkd and
# potentially interfering with DHCP on the WAN interface.
systemd.services."docker-7dtd".serviceConfig = {
Restart = lib.mkForce "on-failure";
RestartSec = "30s";
StartLimitIntervalSec = 300;
StartLimitBurst = 5;
};
systemd.services."docker-7dtd-coop".serviceConfig = {
Restart = lib.mkForce "on-failure";
RestartSec = "30s";
StartLimitIntervalSec = 300;
StartLimitBurst = 5;
};
}; };
} }

View file

@ -110,7 +110,7 @@ in
}; };
"camera.nordhammer.it" = protectedProxy 1984; "camera.nordhammer.it" = protectedProxy 1984;
"homepage.nordhammer.it" = protectedProxy 8084; "homepage.nordhammer.it" = protectedProxy 8084;
"7dtd.nordhammer.it" = protectedProxy 8090; # "7dtd.nordhammer.it" = protectedProxy 8090; # 7DTD disabled
"adguard.nordhammer.it" = protectedProxy 3000; "adguard.nordhammer.it" = protectedProxy 3000;
"profilarr.nordhammer.it" = protectedProxy 6868; "profilarr.nordhammer.it" = protectedProxy 6868;
"sabnzbd.nordhammer.it" = protectedProxy 8085; "sabnzbd.nordhammer.it" = protectedProxy 8085;