diff options
13 files changed, 558 insertions, 465 deletions
diff --git a/host/Rory-nginx/services/matrix/synapse/workers/auth.nix b/host/Rory-nginx/services/matrix/synapse/workers/auth.nix index 37cdc85..50d52c6 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/auth.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/auth.nix @@ -22,6 +22,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.authWorkers > 0) { services.matrix-synapse = { @@ -41,29 +44,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -75,13 +79,14 @@ in ); }; - services.nginx.upstreams = ( - lib.listToAttrs ( + services.nginx = { + upstreams = lib.listToAttrs ( lib.map (type: { name = "${workerName}-${type}"; value = { extraConfig = '' keepalive 32; + least_conn; ''; servers = lib.listToAttrs ( lib.map (index: { @@ -92,20 +97,21 @@ in }) workers ); }; - }) ([ ] ++ lib.optional (lib.length workerRoutes.client > 0) "client" ++ lib.optional (lib.length workerRoutes.federation > 0) "federation" ++ lib.optional (lib.length workerRoutes.media > 0) "media") - ) - ); + }) enabledResources + ); - services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach ([ ] ++ lib.optional (lib.length workerRoutes.client > 0) "client" ++ lib.optional (lib.length workerRoutes.federation > 0) "federation" ++ lib.optional (lib.length workerRoutes.media > 0) "media") ( + lib.forEach enabledResources ( type: lib.map (route: { name = route; value = { proxyPass = "http://${workerName}-${type}"; - + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; }; }) workerRoutes.${type} ) diff --git a/host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix b/host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix index 937fabc..249084a 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix @@ -45,6 +45,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.clientReaders > 0) { services.matrix-synapse = { @@ -64,29 +67,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -98,38 +102,42 @@ in ); }; - services.nginx.upstreams."${workerName}" = { - extraConfig = '' - keepalive 32; - ''; - servers = lib.listToAttrs ( - lib.map (index: { - name = "unix:/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + services.nginx = { + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; value = { - max_fails = 0; + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); }; - }) workers + }) enabledResources ); - }; - services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/event-creator.nix b/host/Rory-nginx/services/matrix/synapse/workers/event-creator.nix index c4b9c7f..c841b93 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/event-creator.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/event-creator.nix @@ -6,19 +6,21 @@ let workers = lib.range 0 (cfg.eventCreators - 1); workerName = "event_creator"; workerRoutes = { - client = - [ - "^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/redact" - "^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/send" - "^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/(join|invite|leave|ban|unban|kick)$" - "^/_matrix/client/(api/v1|r0|v3|unstable)/join/" - "^/_matrix/client/(api/v1|r0|v3|unstable)/knock/" - "^/_matrix/client/(api/v1|r0|v3|unstable)/profile/" - ]; + client = [ + "^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/redact" + "^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/send" + "^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/(join|invite|leave|ban|unban|kick)$" + "^/_matrix/client/(api/v1|r0|v3|unstable)/join/" + "^/_matrix/client/(api/v1|r0|v3|unstable)/knock/" + "^/_matrix/client/(api/v1|r0|v3|unstable)/profile/" + ]; federation = [ ]; media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.eventCreators > 0) { services.matrix-synapse = { @@ -38,29 +40,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -72,38 +75,42 @@ in ); }; - services.nginx.upstreams."${workerName}" = { - extraConfig = '' - keepalive 32; - ''; - servers = lib.listToAttrs ( - lib.map (index: { - name = "unix:/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + services.nginx = { + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; value = { - max_fails = 0; + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); }; - }) workers + }) enabledResources ); - }; - services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/federation-inbound.nix b/host/Rory-nginx/services/matrix/synapse/workers/federation-inbound.nix index 4ea5aa2..83ceec7 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/federation-inbound.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/federation-inbound.nix @@ -11,6 +11,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.federationInboundWorkers > 0) { services.matrix-synapse = { @@ -30,29 +33,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-federation-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "federation" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -64,39 +68,42 @@ in ); }; - services.nginx.upstreams."${workerName}" = { - extraConfig = '' - keepalive 32; - ip_hash; - ''; - servers = lib.listToAttrs ( - lib.map (index: { - name = "unix:/run/matrix-synapse/${workerName}-federation-${toString index}.sock"; + services.nginx = { + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; value = { - max_fails = 0; + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); }; - }) workers + }) enabledResources ); - }; - services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/federation-reader.nix b/host/Rory-nginx/services/matrix/synapse/workers/federation-reader.nix index 29223d7..6a16fb6 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/federation-reader.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/federation-reader.nix @@ -35,6 +35,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.federationReaders > 0) { services.matrix-synapse = { @@ -54,29 +57,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-federation-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "federation" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -88,39 +92,42 @@ in ); }; - services.nginx.upstreams."${workerName}" = { - extraConfig = '' - keepalive 32; - hash $request_uri consistent; - ''; - servers = lib.listToAttrs ( - lib.map (index: { - name = "unix:/run/matrix-synapse/${workerName}-federation-${toString index}.sock"; + services.nginx = { + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; value = { - max_fails = 0; + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); }; - }) workers + }) enabledResources ); - }; - services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/federation-sender.nix b/host/Rory-nginx/services/matrix/synapse/workers/federation-sender.nix index 598c028..cd482f9 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/federation-sender.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/federation-sender.nix @@ -2,7 +2,7 @@ let cfg = config.services.matrix-synapse; dbGroup = "solo"; - federationSenders = lib.range 0 (cfg.federationSenders - 1); + workers = lib.range 0 (cfg.federationSenders - 1); workerName = "federation_sender"; workerRoutes = { client = [ ]; @@ -10,6 +10,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.federationSenders > 0) { services.matrix-synapse = { @@ -20,11 +23,11 @@ in value = { path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; }; - }) federationSenders + }) workers ); send_federation = false; - federation_sender_instances = lib.map (index: "${workerName}-${toString index}") federationSenders; - outbound_federation_restricted_to = lib.map (index: "${workerName}-${toString index}") federationSenders; + federation_sender_instances = lib.map (index: "${workerName}-${toString index}") workers; + outbound_federation_restricted_to = lib.map (index: "${workerName}-${toString index}") workers; worker_replication_secret = "${workerName}_secret"; }; @@ -33,18 +36,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + mode = "666"; resources = [ { - names = [ "replication" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -52,27 +67,45 @@ in } ); }; - }) federationSenders + }) workers ); }; services.nginx = { - virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( - lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; + value = { + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; + max_fails = 0; }; - }) workerRoutes.${type} - ) + }) workers + ); + }; + }) enabledResources + ); + + virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( + lib.flatten ( + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/media-repo.nix b/host/Rory-nginx/services/matrix/synapse/workers/media-repo.nix index 2cccbf5..4394e10 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/media-repo.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/media-repo.nix @@ -20,6 +20,9 @@ let ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.mediaRepoWorkers > 0) { services.matrix-synapse = { @@ -42,29 +45,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-media-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "media" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -87,30 +91,44 @@ in ); }; - services.nginx.upstreams."${workerName}" = { - extraConfig = '' - keepalive 32; - ''; - servers = lib.listToAttrs ( - lib.map (index: { - name = "unix:/run/matrix-synapse/${workerName}-media-${toString index}.sock"; + services.nginx = { + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; value = { - max_fails = 0; + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); }; - }) workers + }) enabledResources ); - }; - services.nginx.virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( - lib.map (route: { - name = route; - value = { - proxyPass = "http://${workerName}"; - extraConfig = '' - client_max_body_size 500M; - ''; - }; - }) workerRoutes.media - ); + virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( + lib.flatten ( + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) + ) + ); + }; }; } diff --git a/host/Rory-nginx/services/matrix/synapse/workers/pusher.nix b/host/Rory-nginx/services/matrix/synapse/workers/pusher.nix index 64d40b2..7388824 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/pusher.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/pusher.nix @@ -2,7 +2,7 @@ let cfg = config.services.matrix-synapse; dbGroup = "small"; - pushers = lib.range 0 (cfg.pushers - 1); + workers = lib.range 0 (cfg.pushers - 1); workerName = "pusher"; workerRoutes = { client = [ ]; @@ -10,6 +10,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.pushers > 0) { services.matrix-synapse = { @@ -20,10 +23,10 @@ in value = { path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; }; - }) pushers + }) workers ); - pusher_instances = lib.map (index: "${workerName}-${toString index}") pushers; + pusher_instances = lib.map (index: "${workerName}-${toString index}") workers; }; workers = lib.listToAttrs ( @@ -31,18 +34,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + mode = "666"; resources = [ { - names = [ "replication" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -50,28 +65,46 @@ in } ); }; - }) pushers + }) workers ); }; services.nginx = { - virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( - lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; + value = { + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; + max_fails = 0; }; - }) workerRoutes.${type} - ) + }) workers + ); + }; + }) enabledResources + ); + + virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( + lib.flatten ( + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/single/appservice.nix b/host/Rory-nginx/services/matrix/synapse/workers/single/appservice.nix index a19b076..315a322 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/single/appservice.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/single/appservice.nix @@ -10,6 +10,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf cfg.enableAppserviceWorker { services.matrix-synapse = { @@ -39,28 +42,17 @@ in ]; } ] - ++ lib.optional (lib.length workerRoutes.client > 0) { + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client.sock"; + path = "/run/matrix-synapse/${workerName}-${type}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ++ lib.optional (lib.length workerRoutes.federation > 0) { - type = "http"; - path = "/run/matrix-synapse/${workerName}-federation.sock"; - mode = "666"; - resources = [ - { - names = [ "federation" ]; - compress = false; - } - ]; - }; + }) enabledResources; database = (import ../../db.nix { inherit workerName dbGroup; }); }; @@ -70,21 +62,15 @@ in services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/single/background.nix b/host/Rory-nginx/services/matrix/synapse/workers/single/background.nix index bfa1793..b667e19 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/single/background.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/single/background.nix @@ -12,6 +12,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf cfg.enableBackgroundWorker { services.matrix-synapse = { @@ -41,28 +44,17 @@ in ]; } ] - ++ lib.optional (lib.length workerRoutes.client > 0) { + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client.sock"; + path = "/run/matrix-synapse/${workerName}-${type}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ++ lib.optional (lib.length workerRoutes.federation > 0) { - type = "http"; - path = "/run/matrix-synapse/${workerName}-federation.sock"; - mode = "666"; - resources = [ - { - names = [ "federation" ]; - compress = false; - } - ]; - }; + }) enabledResources; database = (import ../../db.nix { inherit workerName dbGroup; }); }; @@ -72,21 +64,15 @@ in services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/single/user-dir.nix b/host/Rory-nginx/services/matrix/synapse/workers/single/user-dir.nix index 56dbd5f..89c6aa4 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/single/user-dir.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/single/user-dir.nix @@ -15,6 +15,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf cfg.enableUserDirWorker { services.matrix-synapse = { @@ -44,28 +47,17 @@ in ]; } ] - ++ lib.optional (lib.length workerRoutes.client > 0) { + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client.sock"; + path = "/run/matrix-synapse/${workerName}-${type}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ++ lib.optional (lib.length workerRoutes.federation > 0) { - type = "http"; - path = "/run/matrix-synapse/${workerName}-federation.sock"; - mode = "666"; - resources = [ - { - names = [ "federation" ]; - compress = false; - } - ]; - }; + }) enabledResources; database = (import ../../db.nix { inherit workerName dbGroup; }); }; @@ -75,21 +67,15 @@ in services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/stream-writers/event-stream-writer.nix b/host/Rory-nginx/services/matrix/synapse/workers/stream-writers/event-stream-writer.nix index 3cf6b78..35bd4e9 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/stream-writers/event-stream-writer.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/stream-writers/event-stream-writer.nix @@ -12,6 +12,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.eventStreamWriters > 0) { services.matrix-synapse = { @@ -33,29 +36,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../../db.nix { inherit dbGroup; @@ -67,38 +71,42 @@ in ); }; - services.nginx.upstreams."${workerName}" = { - extraConfig = '' - keepalive 32; - ''; - servers = lib.listToAttrs ( - lib.map (index: { - name = "unix:/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + services.nginx = { + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; value = { - max_fails = 0; + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); }; - }) workers + }) enabledResources ); - }; - services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; diff --git a/host/Rory-nginx/services/matrix/synapse/workers/sync.nix b/host/Rory-nginx/services/matrix/synapse/workers/sync.nix index 645e550..636f521 100644 --- a/host/Rory-nginx/services/matrix/synapse/workers/sync.nix +++ b/host/Rory-nginx/services/matrix/synapse/workers/sync.nix @@ -16,6 +16,9 @@ let media = [ ]; }; in +let + enabledResources = lib.optionals (lib.length workerRoutes.client > 0) [ "client" ] ++ lib.optionals (lib.length workerRoutes.federation > 0) [ "federation" ] ++ lib.optionals (lib.length workerRoutes.media > 0) [ "media" ]; +in { config = lib.mkIf (cfg.syncWorkers > 0) { services.matrix-synapse = { @@ -35,29 +38,30 @@ in name = "${workerName}-${toString index}"; value = { worker_app = "synapse.app.generic_worker"; - worker_listeners = [ - { - type = "http"; - path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; - resources = [ - { - names = [ "replication" ]; - compress = false; - } - ]; - } - { + worker_listeners = + [ + { + type = "http"; + path = "/run/matrix-synapse/${workerName}-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + ] + ++ lib.map (type: { type = "http"; - path = "/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + path = "/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; mode = "666"; resources = [ { - names = [ "client" ]; + names = [ type ]; compress = false; } ]; - } - ]; + }) enabledResources; database = ( import ../db.nix { inherit dbGroup; @@ -69,38 +73,42 @@ in ); }; - services.nginx.upstreams."${workerName}" = { - extraConfig = '' - keepalive 32; - ''; - servers = lib.listToAttrs ( - lib.map (index: { - name = "unix:/run/matrix-synapse/${workerName}-client-${toString index}.sock"; + services.nginx = { + upstreams = lib.listToAttrs ( + lib.map (type: { + name = "${workerName}-${type}"; value = { - max_fails = 0; + extraConfig = '' + keepalive 32; + least_conn; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/${workerName}-${type}-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); }; - }) workers + }) enabledResources ); - }; - services.nginx = { virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( lib.flatten ( - lib.forEach - [ - "client" - "federation" - "media" - ] - ( - type: - lib.map (route: { - name = route; - value = { - proxyPass = "http://unix:/run/matrix-synapse/${workerName}-${type}.sock"; - }; - }) workerRoutes.${type} - ) + lib.forEach enabledResources ( + type: + lib.map (route: { + name = route; + value = { + proxyPass = "http://${workerName}-${type}"; + extraConfig = '' + proxy_http_version 1.1; + proxy_set_header Connection ""; + ''; + }; + }) workerRoutes.${type} + ) ) ); }; |