diff --git a/nix/modules/default/cs/admin-api.nix b/nix/modules/default/cs/admin-api.nix index 2d3ad2f2a..c19e6ea58 100644 --- a/nix/modules/default/cs/admin-api.nix +++ b/nix/modules/default/cs/admin-api.nix @@ -59,6 +59,7 @@ in ); serviceConfig = { ExecStart = "${self.packages.${pkgs.stdenv.hostPlatform.system}.Spacebar-AdminApi}/bin/Spacebar.AdminApi"; + Slice = "system-spacebar.slice"; }; }; }; diff --git a/nix/modules/default/cs/cdn-cs.nix b/nix/modules/default/cs/cdn-cs.nix index 6327c7cfe..59140138e 100644 --- a/nix/modules/default/cs/cdn-cs.nix +++ b/nix/modules/default/cs/cdn-cs.nix @@ -54,6 +54,7 @@ in ); serviceConfig = { ExecStart = "${self.packages.${pkgs.stdenv.hostPlatform.system}.Spacebar-AdminApi}/bin/Spacebar.AdminApi"; + Slice = "system-spacebar.slice"; }; }; }; diff --git a/nix/modules/default/cs/offload-cs.nix b/nix/modules/default/cs/offload-cs.nix index 72324f180..a321ab9a1 100644 --- a/nix/modules/default/cs/offload-cs.nix +++ b/nix/modules/default/cs/offload-cs.nix @@ -84,6 +84,7 @@ in ); serviceConfig = { ExecStart = "${lib.getExe self.packages.${pkgs.stdenv.hostPlatform.system}.Spacebar-Offload}"; + Slice = "system-spacebar.slice"; }; }; }; diff --git a/nix/modules/default/cs/uapi.nix b/nix/modules/default/cs/uapi.nix index 23f220ecf..50fe49c68 100644 --- a/nix/modules/default/cs/uapi.nix +++ b/nix/modules/default/cs/uapi.nix @@ -60,6 +60,7 @@ in ); serviceConfig = { ExecStart = "${self.packages.${pkgs.stdenv.hostPlatform.system}.Spacebar-UApi}/bin/Spacebar.UApi"; + Slice = "system-spacebar.slice"; }; }; }; diff --git a/nix/modules/default/default.nix b/nix/modules/default/default.nix index 12abfe777..6c7a6772e 100644 --- a/nix/modules/default/default.nix +++ b/nix/modules/default/default.nix @@ -106,6 +106,11 @@ in // secrets.options; config = lib.mkIf cfg.enable { + systemd.slices.system-spacebar = { + description = "Spacebar server"; + documentation = [ "https://docs.spacebar.chat"]; + }; + services.spacebarchat-server.uApi.extraConfiguration.Spacebar.UApi.FallbackApiEndpoint = "http://127.0.0.1:${toString cfg.apiEndpoint.localPort}"; systemd.services.spacebar-api = makeServerTsService { @@ -128,6 +133,7 @@ in serviceConfig = { ExecStart = "${cfg.package}/bin/start-api"; Type = "notify"; + Slice = "system-spacebar.slice"; }; }; @@ -153,6 +159,7 @@ in serviceConfig = { ExecStart = "${cfg.package}/bin/start-gateway"; Type = "notify"; + Slice = "system-spacebar.slice"; }; }; @@ -177,6 +184,7 @@ in serviceConfig = { ExecStart = "${cfg.package}/bin/start-cdn"; Type = "notify"; + Slice = "system-spacebar.slice"; }; }); }; diff --git a/nix/modules/default/gw-sharding.nix b/nix/modules/default/gw-sharding.nix index 8e79dc788..45f4e1a58 100644 --- a/nix/modules/default/gw-sharding.nix +++ b/nix/modules/default/gw-sharding.nix @@ -21,34 +21,44 @@ in }; }; - config = lib.mkIf cfg.enable { - systemd.services = builtins.listToAttrs ( - map (port: { - name = "spacebar-gateway-${toString port}"; - value = makeServerTsService { - description = "Spacebar Server - Gateway (extra port ${toString port})"; - # after = [ "spacebar-api.service" ]; - environment = builtins.mapAttrs (_: val: builtins.toString val) ( - { - # things we set by default... - EVENT_TRANSMISSION = "unix"; - EVENT_SOCKET_PATH = "/run/spacebar/"; - } - // cfg.extraEnvironment - // { - # things we force... - CONFIG_PATH = configFile; - CONFIG_READONLY = 1; - PORT = toString port; - STORAGE_LOCATION = cfg.cdnPath; - APPLY_DB_MIGRATIONS = "false"; - } - ); - serviceConfig = { - ExecStart = "${cfg.package}/bin/start-gateway"; + config = lib.mkIf (builtins.any (_: true) cfg.extraGatewayPorts) { + systemd.slices.system-spacebar-gateway = { + description = "Spacebar server (gateway shards)"; + documentation = [ "https://docs.spacebar.chat" ]; + }; + + systemd.services = + builtins.listToAttrs ( + map (port: { + name = "spacebar-gateway-${toString port}"; + value = makeServerTsService { + description = "Spacebar Server - Gateway (extra port ${toString port})"; + # after = [ "spacebar-api.service" ]; + environment = builtins.mapAttrs (_: val: builtins.toString val) ( + { + # things we set by default... + EVENT_TRANSMISSION = "unix"; + EVENT_SOCKET_PATH = "/run/spacebar/"; + } + // cfg.extraEnvironment + // { + # things we force... + CONFIG_PATH = configFile; + CONFIG_READONLY = 1; + PORT = toString port; + STORAGE_LOCATION = cfg.cdnPath; + APPLY_DB_MIGRATIONS = "false"; + } + ); + serviceConfig = { + ExecStart = "${cfg.package}/bin/start-gateway"; + Slice = "system-spacebar-gateway.slice"; + }; }; - }; - }) cfg.extraGatewayPorts - ); + }) cfg.extraGatewayPorts + ) + // { + "spacebar-gateway".serviceConfig.Slice = "system-spacebar-gateway.slice"; + }; }; } diff --git a/nix/modules/default/pion-sfu.nix b/nix/modules/default/pion-sfu.nix index cd8c88cb1..523f2971c 100644 --- a/nix/modules/default/pion-sfu.nix +++ b/nix/modules/default/pion-sfu.nix @@ -70,6 +70,7 @@ in serviceConfig = { ExecStart = "${cfg.package}/bin/start-webrtc"; Type = "notify"; + Slice = "system-spacebar.slice"; }; }; @@ -77,6 +78,7 @@ in description = "Spacebar Server - Pion SFU"; serviceConfig = { ExecStart = "${lib.getExe cfg.pion-sfu.package} -ip ${cfg.pion-sfu.publicIp} -port ${toString cfg.pion-sfu.listenPort}"; + Slice = "system-spacebar.slice"; }; }; };