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}
+ )
)
);
};
|