diff --git a/hosts/srv03/default.nix b/hosts/srv03/default.nix index 78f2cfc..d53ba85 100644 --- a/hosts/srv03/default.nix +++ b/hosts/srv03/default.nix @@ -16,6 +16,7 @@ ../../modules/docker.nix ../../modules/traefik.nix ../../modules/pocket-id.nix + ../../modules/beszel-hub.nix ../../modules/netbird-docker.nix ../../modules/netbird-client.nix ../../modules/dockhand.nix @@ -51,6 +52,11 @@ appUrl = "dockhand.jfreudenberger.de"; }; + beszel-docker = { + enable = true; + appUrl = "https://beszel.jfreudenberger.de"; + }; + netbird-docker = { enable = true; secrets = config.age.secrets.netbird-server; diff --git a/modules/beszel-hub.nix b/modules/beszel-hub.nix new file mode 100644 index 0000000..7b2376a --- /dev/null +++ b/modules/beszel-hub.nix @@ -0,0 +1,58 @@ +{ + config, + lib, + ... +}: +let + + cfg = config.services.beszel-docker; + version = "0.18.7"; + +in { + + options.services.beszel-docker = { + enable = lib.mkEnableOption "Beszel hub hosted as OCI container"; + appUrl = lib.mkOption { + description = "URL of the beszel hub"; + type = lib.types.str; + }; + }; + + config = lib.mkIf cfg.enable { + virtualisation.oci-containers.containers = { + beszel = { + image = "henrygd/beszel:${version}"; + autoStart = true; + networks = [ + "traefik" + ]; + environment = { + APP_URL = cfg.appUrl; + }; + extraOptions = [ + ''--mount=type=volume,source=data,target=/beszel_data,volume-driver=local'' + /*''--health-cmd=["/beszel" "health" "--url" "http://localhost:8090"]'' + "--health-interval=120s" + "--health-timeout=5s" + "--health-retries=2" + "--health-start-period=10s"*/ + ]; + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.beszel.rule" = "Host(`${lib.removePrefix "https://" cfg.appUrl}`)"; + "traefik.http.routers.beszel.entrypoints" = "websecure"; + }; + }; + }; + + systemd.services."docker-beszel" = { + after = [ + "docker-traefik.service" + ]; + requires = [ + "docker-traefik.service" + ]; + }; + + }; +}