summary refs log tree commit diff
path: root/modules
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-02-18 11:18:56 +0100
committerRory& <root@rory.gay>2025-02-18 11:18:56 +0100
commit85f5ba751b5a922f7069e8f213b5c5b6f2e192df (patch)
tree614e9ca7e97527cc421a55945cdefbf4dc0a084c /modules
parentSynapse work (diff)
downloadRory-Open-Architecture-85f5ba751b5a922f7069e8f213b5c5b6f2e192df.tar.xz
Synapse work
Diffstat (limited to 'modules')
-rwxr-xr-xmodules/base.nix2
-rw-r--r--modules/software-templates/synapse-workers/generic.nix62
-rw-r--r--modules/software-templates/synapse-workers/module.nix91
3 files changed, 78 insertions, 77 deletions
diff --git a/modules/base.nix b/modules/base.nix

index f2f8f57..e366f59 100755 --- a/modules/base.nix +++ b/modules/base.nix
@@ -174,7 +174,7 @@ services.getty.autologinUser = "root"; virtualisation = { memorySize = 4096; - cores = 6; + cores = 2; msize = 1*1024*1024; bios = pkgs.qboot; }; diff --git a/modules/software-templates/synapse-workers/generic.nix b/modules/software-templates/synapse-workers/generic.nix
index 5e540b3..d524baf 100644 --- a/modules/software-templates/synapse-workers/generic.nix +++ b/modules/software-templates/synapse-workers/generic.nix
@@ -1,18 +1,25 @@ +{ + workerName, + tasks, + dbOverrides ? { }, + count ? 1, +}: { config, lib, ... }: +#let +# dbGroup = "medium"; +# workerName = "account_data_stream_writer"; +# tasks = [ "stream_account_data" ]; +## workerRoutes = workerLib.workerRoutes.accountData; +# count = 1; +#in let + workerLib = import ./lib.nix; cfg = config.services.matrix-synapse; - workerLib = import ../lib.nix; - dbGroup = "medium"; -# streamWriterType = "account_data"; - workers = lib.range 0 (cfg.accountDataStreamWriters - 1); - workerName = "account_data_stream_writer"; - tasks = [ "stream_account_data" ]; - workerRoutes = workerLib.workerRoutes.accountData; -in -let enabledResources = lib.attrNames workerRoutes; - streamTypes = [] + workers = lib.range 0 count; + streamTypes = + [ ] ++ lib.optional (lib.elem "stream_account_data" tasks) "account_data" ++ lib.optional (lib.elem "stream_presence" tasks) "presence" ++ lib.optional (lib.elem "stream_push_rules" tasks) "push_rules" @@ -20,10 +27,14 @@ let ++ lib.optional (lib.elem "stream_typing" tasks) "typing" ++ lib.optional (lib.elem "stream_receipts" tasks) "receipts" ++ lib.optional (lib.elem "stream_events" tasks) "events"; + + # recursive update list of attrs +# recursiveMerge = list: lib.foldl (a: b: lib.recursiveUpdate a b) (lib.head list) (lib.tail list); +# workerRoutes = recursiveMerge (lib.map (type: workerLib.workerRoutes.${type}) streamTypes); in { config = lib.mkIf (cfg.accountDataStreamWriters > 0) { - monitoring.synapse.workerNames = lib.map (index: "${workerName}-${toString index}") workers; + monitoring.synapse.workerNames = if (count == 1) then [ workerName ] else lib.map (index: "${workerName}-${toString index}") workers; services.matrix-synapse = { settings = { instance_map = lib.listToAttrs ( @@ -35,9 +46,6 @@ in }) workers ); - #stream_writers.${streamWriterType} = lib.map (index: "${workerName}-${toString index}") workers; -# stream_writers = lib.listToA - # map `streams` to `workers` stream_writers = lib.listToAttrs ( lib.map (stream: { name = stream; @@ -75,12 +83,26 @@ in } ]; }) enabledResources; - database = ( - import ../../db.nix { - inherit dbGroup; - workerName = "${workerName}-${toString index}"; - } - ); + database = lib.recursiveUpdate (lib.recursiveUpdate config.services.matrix-synapse.settings.database { + application_name = "matrix-synapse (${config.services.matrix-synapse.settings.server_name}) - ${if workerName == null then throw "synapse/db.nix: workerName unspecified" else workerName}"; + }) dbOverrides; + + #region Media + max_upload_size = lib.mkIf (lib.elem "media_repo" tasks) "512M"; + max_avatar_size = lib.mkIf (lib.elem "media_repo" tasks) "512M"; + max_image_pixels = lib.mkIf (lib.elem "media_repo" tasks) "250M"; + + max_pending_media_uploads = lib.mkIf (lib.elem "media_repo" tasks) 512; + dynamic_thumbnails = lib.mkIf (lib.elem "media_repo" tasks) true; + + prevent_media_downloads_from = lib.mkIf (lib.elem "media_repo" tasks) [ + # none, give me all the media + ]; + enable_authenticated_media = lib.mkIf (lib.elem "media_repo" tasks) false; + + url_preview_enabled = lib.mkIf (lib.elem "media_repo" tasks) true; + max_spider_size = lib.mkIf (lib.elem "media_repo" tasks) "50M"; + #endregion }; }) workers ); diff --git a/modules/software-templates/synapse-workers/module.nix b/modules/software-templates/synapse-workers/module.nix
index 5a40045..b1d0ced 100644 --- a/modules/software-templates/synapse-workers/module.nix +++ b/modules/software-templates/synapse-workers/module.nix
@@ -11,29 +11,6 @@ let in { imports = [ - ./single/appservice.nix - ./single/background.nix - ./single/user-dir.nix - - ./auth.nix - ./client-reader.nix - ./event-creator.nix - ./federation-inbound.nix - ./federation-reader.nix - ./federation-sender.nix - ./media-repo.nix - ./pusher.nix - ./sync.nix - - ./stream-writers/account_data-stream-writer.nix - ./stream-writers/event-stream-writer.nix - ./stream-writers/presence-stream-writer.nix - ./stream-writers/push_rule-stream-writer.nix - ./stream-writers/receipt-stream-writer.nix - ./stream-writers/to_device-stream-writer.nix - ./stream-writers/typing-stream-writer.nix - - # ./stream-writers/shared-stream-writer.nix ]; options.services.matrix-synapse = { enableWorkers = lib.mkEnableOption "Enable dedicated workers"; @@ -77,39 +54,41 @@ in }; config = { - assertions = [ - { - assertion = cfg.enableWorkers -> cfg.nginxVirtualHostName != null; - message = "nginxVirtualHostName must be set when enableWorkers is true"; - } - - # Stream types and count limitations: https://github.com/element-hq/synapse/blob/develop/synapse/config/workers.py#L344 - { - assertion = lib.length cfg.settings.stream_writers.typing <= 1; - message = "Only one typing stream writer is supported"; - } - { - assertion = lib.length cfg.settings.stream_writers.to_device <= 1; - message = "Only one to_device stream writer is supported"; - } - { - assertion = lib.length cfg.settings.stream_writers.account_data <= 1; - message = "Only one account data stream writer is supported"; - } - # This may be outdated in the documentation...? - #{ - # assertion = cfg.receiptStreamWriters <= 1; - # message = "Only one receipt stream writer is supported"; - #} - { - assertion = lib.length cfg.settings.stream_writers.presence <= 1; - message = "Only one presence stream writer is supported"; - } - { - assertion = lib.length cfg.settings.stream_writers.push_rules <= 1; - message = "Only one push rule stream writer is supported"; - } - ]; + assertions = + [ + { + assertion = cfg.enableWorkers -> cfg.nginxVirtualHostName != null; + message = "nginxVirtualHostName must be set when enableWorkers is true"; + } + ] + ++ lib.optionals (cfg.settings ? stream_writers) [ + # Stream types and count limitations: https://github.com/element-hq/synapse/blob/develop/synapse/config/workers.py#L344 + { + assertion = cfg.settings.stream_writers ? typing -> lib.length cfg.settings.stream_writers.typing <= 1; + message = "Only one typing stream writer is supported"; + } + { + assertion = cfg.settings.stream_writers ? to_device -> lib.length cfg.settings.stream_writers.to_device <= 1; + message = "Only one to_device stream writer is supported"; + } + { + assertion = cfg.settings.stream_writers ? account_data -> lib.length cfg.settings.stream_writers.account_data <= 1; + message = "Only one account data stream writer is supported"; + } + # This may be outdated in the documentation...? + #{ + # assertion = cfg.receiptStreamWriters <= 1; + # message = "Only one receipt stream writer is supported"; + #} + { + assertion = cfg.settings.stream_writers ? presence -> lib.length cfg.settings.stream_writers.presence <= 1; + message = "Only one presence stream writer is supported"; + } + { + assertion = cfg.settings.stream_writers ? push_rules -> lib.length cfg.settings.stream_writers.push_rules <= 1; + message = "Only one push rule stream writer is supported"; + } + ]; # Matrix utility maps services.nginx.appendHttpConfig = ''