diff options
author | Rory& <root@rory.gay> | 2024-07-04 19:09:51 +0200 |
---|---|---|
committer | Rory& <root@rory.gay> | 2024-07-04 19:09:51 +0200 |
commit | 5e2dafaa19109ac3ce9a941408c85acf85e902ed (patch) | |
tree | 3a31ea6b0568c3b7a746437b1d466c196cb6db73 /host/Rory-nginx/services/matrix/synapse/workers/sync.nix | |
parent | fixx (diff) | |
download | Rory-Open-Architecture-5e2dafaa19109ac3ce9a941408c85acf85e902ed.tar.xz |
More workers?
Diffstat (limited to 'host/Rory-nginx/services/matrix/synapse/workers/sync.nix')
-rw-r--r-- | host/Rory-nginx/services/matrix/synapse/workers/sync.nix | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/host/Rory-nginx/services/matrix/synapse/workers/sync.nix b/host/Rory-nginx/services/matrix/synapse/workers/sync.nix new file mode 100644 index 0000000..d409d54 --- /dev/null +++ b/host/Rory-nginx/services/matrix/synapse/workers/sync.nix @@ -0,0 +1,98 @@ +{ + config, + pkgs, + lib, + ... +}: + +let + cfg = config.services.matrix-synapse; + workers = lib.range 0 (cfg.syncWorkers - 1); + routes = [ + "~ ^/_matrix/client/(v2_alpha|r0|v3)/sync$" + "~ ^/_matrix/client/(api/v1|v2_alpha|r0|v3)/events$" + "~ ^/_matrix/client/(api/v1|r0|v3)/initialSync$" + "~ ^/_matrix/client/(api/v1|r0|v3)/rooms/[^/]+/initialSync$" + ]; +in +{ + config = lib.mkIf (cfg.syncWorkers > 0) { + services.matrix-synapse = { + settings = { + instance_map = lib.listToAttrs ( + lib.map (index: { + name = "sync-${toString index}"; + value = { + path = "/run/matrix-synapse/sync-${toString index}.sock"; + }; + }) workers + ); + + media_instance_running_background_jobs = "sync-0"; + enable_sync = false; + }; + + workers = lib.listToAttrs ( + lib.map (index: { + name = "sync-${toString index}"; + value = { + worker_app = "synapse.app.generic_worker"; + worker_listeners = [ + { + type = "http"; + path = "/run/matrix-synapse/sync-${toString index}.sock"; + resources = [ + { + names = [ "replication" ]; + compress = false; + } + ]; + } + { + type = "http"; + path = "/run/matrix-synapse/sync-client-${toString index}.sock"; + mode = "666"; + resources = [ + { + names = [ "client" ]; + compress = false; + } + ]; + } + ]; + database = ( + import ../db.nix { + workerName = "sync-${toString index}"; + dbGroup = "small"; + } + ); + enable_sync = true; + }; + }) workers + ); + }; + + services.nginx.upstreams."sync" = { + extraConfig = '' + keepalive 32; + ''; + servers = lib.listToAttrs ( + lib.map (index: { + name = "unix:/run/matrix-synapse/sync-client-${toString index}.sock"; + value = { + max_fails = 0; + }; + }) workers + ); + }; + + services.nginx.virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs ( + lib.map (route: { + name = route; + value = { + proxyPass = "http://sync"; + }; + }) routes + ); + }; +} |