diff --git a/modules/hosts/nixos/hetznix01/default.nix b/modules/hosts/nixos/hetznix01/default.nix
index 787d56d..35946b0 100644
--- a/modules/hosts/nixos/hetznix01/default.nix
+++ b/modules/hosts/nixos/hetznix01/default.nix
@@ -2,11 +2,9 @@
imports = [
./hardware-configuration.nix
./disk-config.nix
- # Added post-install
- ./sops.nix
- ./nginx.nix
- ./restic.nix
- ./tailscale.nix
+ ./owntracks.nix
+ ./post-install-general.nix
+ ./post-install-nginx.nix
];
system.stateVersion = "24.05";
diff --git a/modules/hosts/nixos/hetznix01/nginx.nix b/modules/hosts/nixos/hetznix01/nginx.nix
deleted file mode 100644
index 641f63d..0000000
--- a/modules/hosts/nixos/hetznix01/nginx.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ ... }: let
- http_port = 80;
- https_port = 443;
-in {
- imports = [
- ../../../system/common/linux/lets-encrypt.nix
- ];
- services.nginx = {
- enable = true;
- recommendedGzipSettings = true;
- recommendedOptimisation = true;
- recommendedProxySettings = true;
- recommendedTlsSettings = true;
- appendHttpConfig = ''
- # Add HSTS header with preloading to HTTPS requests.
- # Adding this header to HTTP requests is discouraged
- map $scheme $hsts_header {
- https "max-age=31536000 always;";
- }
- add_header Strict-Transport-Security $hsts_header;
- '';
- virtualHosts = {
- "hetznix01.technicalissues.us" = {
- default = true;
- listen = [
- { port = http_port; addr = "0.0.0.0"; }
- { port = https_port; addr = "0.0.0.0"; ssl = true; }
- ];
- enableACME = true;
- acmeRoot = null;
- addSSL = true;
- forceSSL = false;
- locations."/" = {
- return = "200 '
Hello world ;)
'";
- extraConfig = ''
- add_header Content-Type text/html;
- '';
- };
- };
- "utk.technicalissues.us" = {
- listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }];
- enableACME = true;
- acmeRoot = null;
- forceSSL = true;
- locations."/".proxyWebsockets = true;
- locations."/".proxyPass = "http://127.0.0.1:3001";
- };
- }; # end virtualHosts
- }; # end nginx
-}
diff --git a/modules/hosts/nixos/hetznix01/owntracks.nix b/modules/hosts/nixos/hetznix01/owntracks.nix
new file mode 100644
index 0000000..3c6fd49
--- /dev/null
+++ b/modules/hosts/nixos/hetznix01/owntracks.nix
@@ -0,0 +1,20 @@
+{ config, pkgs, ... }: let
+ frontend_port = "8082";
+in {
+ environment.systemPackages = with pkgs; [
+ owntracks-recorder
+ ];
+
+ virtualisation.oci-containers.containers = {
+ "owntracks-frontend" = {
+ autoStart = true;
+ image = "docker.io/owntracks/frontend:2.15.3";
+ environment = {
+ LISTEN = frontend_port;
+ SERVER_HOST = config.networking.hostName;
+ SERVER_PORT = "8083";
+ };
+ ports = [ "${frontend_port}:${frontend_port}" ];
+ };
+ };
+}
diff --git a/modules/hosts/nixos/hetznix01/sops.nix b/modules/hosts/nixos/hetznix01/post-install-general.nix
similarity index 51%
rename from modules/hosts/nixos/hetznix01/sops.nix
rename to modules/hosts/nixos/hetznix01/post-install-general.nix
index abd4db0..a40721f 100644
--- a/modules/hosts/nixos/hetznix01/sops.nix
+++ b/modules/hosts/nixos/hetznix01/post-install-general.nix
@@ -1,4 +1,25 @@
-{ username, ... }: {
+{ config, username, ... }: {
+ imports = [
+ ../../../system/common/linux/restic.nix
+ ];
+
+ services = {
+ restic.backups.daily.paths = [
+ "/var/lib/uptime-kuma"
+ ];
+ tailscale = {
+ enable = true;
+ authKeyFile = config.sops.secrets.tailscale_key.path;
+ extraUpFlags = [
+ "--advertise-exit-node"
+ "--operator"
+ "${username}"
+ "--ssh"
+ ];
+ useRoutingFeatures = "both";
+ };
+ };
+
sops = {
age.keyFile = /home/${username}/.config/sops/age/keys.txt;
defaultSopsFile = ./secrets.yaml;
@@ -16,5 +37,4 @@
};
};
};
-}
-
+}
\ No newline at end of file
diff --git a/modules/hosts/nixos/hetznix01/post-install-nginx.nix b/modules/hosts/nixos/hetznix01/post-install-nginx.nix
new file mode 100644
index 0000000..b155366
--- /dev/null
+++ b/modules/hosts/nixos/hetznix01/post-install-nginx.nix
@@ -0,0 +1,93 @@
+{ config, ... }: let
+ domain = "technicalissues.us";
+ http_port = 80;
+ https_port = 443;
+in {
+ imports = [
+ ../../../system/common/linux/lets-encrypt.nix
+ ];
+ services.nginx = {
+ enable = true;
+ recommendedGzipSettings = true;
+ recommendedOptimisation = true;
+ recommendedProxySettings = true;
+ recommendedTlsSettings = true;
+ appendHttpConfig = ''
+ # Add HSTS header with preloading to HTTPS requests.
+ # Adding this header to HTTP requests is discouraged
+ map $scheme $hsts_header {
+ https "max-age=31536000 always;";
+ }
+ add_header Strict-Transport-Security $hsts_header;
+ '';
+ virtualHosts = {
+ "hetznix01.${domain}" = {
+ default = true;
+ listen = [
+ { port = http_port; addr = "0.0.0.0"; }
+ { port = https_port; addr = "0.0.0.0"; ssl = true; }
+ ];
+ enableACME = true;
+ acmeRoot = null;
+ addSSL = true;
+ forceSSL = false;
+ locations."/" = {
+ return = "200 'Hello world ;)
'";
+ extraConfig = ''
+ add_header Content-Type text/html;
+ '';
+ };
+ };
+ "ot.${domain}}" = {
+ listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }];
+ enableACME = true;
+ acmeRoot = null;
+ forceSSL = true;
+ basicAuthFile = config.sops.secrets.owntracks_basic_auth.path;
+ locations = {
+ # OwnTracks Frontend container
+ "/" = {
+ proxypass = "http://127.0.0.1:8082";
+ recommendedproxysettings = true;
+ };
+ # OwnTracks Recorder
+ "/owntracks/" = {
+ proxypass = "http://127.0.0.1:8083";
+ recommendedproxysettings = true;
+ };
+ "/owntracks/pub" = { # Client apps need to point to this path
+ extraConfig = "proxy_set_header X-Limit-U $remote_user;";
+ proxypass = "http://127.0.0.1:8083/pub";
+ recommendedproxysettings = true;
+ };
+ "/owntracks/static/" = {
+ proxypass = "http://127.0.0.1:8083/static/";
+ recommendedproxysettings = true;
+ };
+ "/owntracks/utils/" = {
+ proxypass = "http://127.0.0.1:8083/utils/";
+ recommendedproxysettings = true;
+ };
+ "/owntracks/view/" = {
+ extraConfig = "proxy_buffering off;";
+ proxypass = "http://127.0.0.1:8083/view/";
+ recommendedproxysettings = true;
+ };
+ "/owntracks/ws" = {
+ extraConfig = "rewrite ^/owntracks/(.*) /$1 break;";
+ proxyPass = "http://127.0.0.1:8083";
+ recommendedProxySettings = true;
+ };
+ };
+ };
+ "utk.${domain}" = {
+ listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }];
+ enableACME = true;
+ acmeRoot = null;
+ forceSSL = true;
+ locations."/".proxyWebsockets = true;
+ locations."/".proxyPass = "http://127.0.0.1:3001";
+ };
+ }; # end virtualHosts
+ }; # end nginx
+}
diff --git a/modules/hosts/nixos/hetznix01/restic.nix b/modules/hosts/nixos/hetznix01/restic.nix
deleted file mode 100644
index 5acd1b2..0000000
--- a/modules/hosts/nixos/hetznix01/restic.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ ... }: {
- imports = [
- ../../../system/common/linux/restic.nix
- ];
-
- services.restic.backups.daily.paths = [
- "/var/lib/uptime-kuma"
- ];
-}
-
diff --git a/modules/hosts/nixos/hetznix01/tailscale.nix b/modules/hosts/nixos/hetznix01/tailscale.nix
deleted file mode 100644
index d6f3278..0000000
--- a/modules/hosts/nixos/hetznix01/tailscale.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ config, username, ... }: {
- services.tailscale = {
- enable = true;
- authKeyFile = config.sops.secrets.tailscale_key.path;
- extraUpFlags = [
- "--advertise-exit-node"
- "--operator"
- "${username}"
- "--ssh"
- ];
- useRoutingFeatures = "both";
- };
-}
-