Implement easy sliding sync setup

Co-authored-by: h7x4 <h7x4@nani.wtf>
This commit is contained in:
Daniel Lovbrotte Olsen 2023-09-21 19:29:04 +02:00
parent bedede1e6d
commit 50ae1b6e57
4 changed files with 50 additions and 0 deletions

View File

@ -36,3 +36,19 @@ With matrix.YOURDOMAIN pointing at the server:
``` ```
is ~enough to get a functional matrix-server running with some workers is ~enough to get a functional matrix-server running with some workers
## Sliding Sync (Element X)
Just add the following to your config and point `slidingsync.YOURDOMAIN` at the server
```
services.matrix-synapse-next = {
enableSlidingSync = true;
};
matrix-synapse.sliding-sync.environmentFile = "/some/file/containing/SYNCV3_SECRET=<some secret>";
```
If using well-known delagation make sure `YOURDOMAIN/.well-known/matrix/client` matches
what's in `matrix.YOURDOMAIN/.well-known/matrix/client`

View File

@ -15,6 +15,13 @@ in
description = "What package to use for the sliding-sync proxy."; description = "What package to use for the sliding-sync proxy.";
}; };
enableNginx = lib.mkEnableOption (lib.mdDoc "autogenerated nginx config");
publicBaseUrl = lib.mkOption {
type = lib.types.str;
description = "The domain where clients connect, only has an effect with enableNginx";
example = "slidingsync.matrix.org";
};
settings = lib.mkOption { settings = lib.mkOption {
type = lib.types.submodule { type = lib.types.submodule {
freeformType = with lib.types; attrsOf str; freeformType = with lib.types; attrsOf str;
@ -98,5 +105,13 @@ in
WorkingDirectory = "%S/matrix-sliding-sync"; WorkingDirectory = "%S/matrix-sliding-sync";
}; };
}; };
services.nginx.virtualHosts.${cfg.publicBaseUrl} = lib.mkIf cfg.enableNginx {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = lib.replaceStrings [ "0.0.0.0" "::" ] [ "127.0.0.1" "::1" ] "http://${cfg.settings.SYNCV3_BINDADDR}";
};
};
}; };
} }

View File

@ -84,6 +84,8 @@ in
description = "A yaml python logging config file"; description = "A yaml python logging config file";
}; };
enableSlidingSync = mkEnableOption (lib.mdDoc "automatic Sliding Sync setup at `slidingsync.<domain>`");
settings = mkOption { settings = mkOption {
type = types.submodule { type = types.submodule {
freeformType = format.type; freeformType = format.type;
@ -394,5 +396,19 @@ in
}; };
}; };
}; };
services.matrix-synapse-next.settings.extra_well_known_client_content."org.matrix.msc3575.proxy" = mkIf cfg.enableSlidingSync {
url = "https://${config.services.matrix-synapse.sliding-sync.publicBaseUrl}";
};
services.matrix-synapse.sliding-sync = mkIf cfg.enableSlidingSync {
enable = true;
enableNginx = lib.mkDefault cfg.enableNginx;
publicBaseUrl = lib.mkDefault "slidingsync.${cfg.settings.server_name}";
settings = {
SYNCV3_SERVER = lib.mkDefault "https://${cfg.public_baseurl}";
SYNCV3_PROM = lib.mkIf cfg.settings.enable_metrics (lib.mkDefault "127.0.0.1:9001");
};
};
}; };
} }

View File

@ -230,6 +230,9 @@ in
locations."/_synapse/client" = { locations."/_synapse/client" = {
proxyPass = "http://$synapse_backend"; proxyPass = "http://$synapse_backend";
}; };
locations."/.well-known/matrix" = {
proxyPass = "http://$synapse_backend";
};
}; };
}; };
} }