diff --git a/containers/conduit.nix b/containers/conduit.nix index 7659f2c..fca0159 100644 --- a/containers/conduit.nix +++ b/containers/conduit.nix @@ -1,111 +1,175 @@ { nglib, nixpkgs }: -nglib.makeSystem { - system = "x86_64-linux"; - name = "synapse"; - inherit nixpkgs; - config = ({ pkgs, ... }: - { - dumb-init = { - enable = true; - type.services = { }; +{ + postgresql = nglib.makeSystem { + system = "x86_64-linux"; + name = "nixng-synapse-postgresql"; + inherit nixpkgs; + config = { pkgs, config, ... }: + { + config = { + dumb-init = { + enable = true; + type.services = {}; + }; + services.postgresql = { + enable = true; + package = pkgs.postgresql_12; + + initialScript = "/secrets/init.sql"; + enableTCPIP = true; + + authentication = "host all all all md5"; + + ensureDatabases = { "synapse" = { ENCODING = "UTF8"; TEMPLATE = "template0"; }; }; + ensureExtensions = {}; + ensureUsers = [ + { name = "synapse"; ensurePermissions = { + "DATABASE \"synapse\"" = "ALL PRIVILEGES"; + }; + } + ]; + }; + }; }; + }; - init.services.synapse = { - enabled = true; - shutdownOnExit = true; - script = - let - logConfig = (pkgs.formats.yaml {}).generate "log.yaml" - { - # Log configuration for Synapse. - # - # This is a YAML file containing a standard Python logging configuration - # dictionary. See [1] for details on the valid settings. - # - # Synapse also supports structured logging for machine readable logs which can - # be ingested by ELK stacks. See [2] for details. - # - # [1]: https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema - # [2]: https://matrix-org.github.io/synapse/latest/structured_logging.html + synapse = nglib.makeSystem { + system = "x86_64-linux"; + name = "synapse"; + inherit nixpkgs; + config = ({ pkgs, ... }: + { + dumb-init = { + enable = true; + type.services = { }; + }; - version = 1; + init.services.synapse = { + enabled = true; + shutdownOnExit = true; + script = + let + logConfig = (pkgs.formats.yaml {}).generate "log.yaml" + { + # Log configuration for Synapse. + # + # This is a YAML file containing a standard Python logging configuration + # dictionary. See [1] for details on the valid settings. + # + # Synapse also supports structured logging for machine readable logs which can + # be ingested by ELK stacks. See [2] for details. + # + # [1]: https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema + # [2]: https://matrix-org.github.io/synapse/latest/structured_logging.html - formatters.precise.format = "%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s"; - handlers.console = - { - class = "logging.StreamHandler"; - formatter = "precise"; - }; - loggers."synapse.storage.SQL" = - { - level = "INFO"; - }; - root = - { - level = "INFO"; - handlers = [ "console" ]; - }; + version = 1; - disable_existing_loggers = false; - }; - synapseConfig = (pkgs.formats.yaml {}).generate "conduit.yaml" - { - server_name = "matrix.redalder.org"; - report_stats = "yes"; - pid_file = "/homeserver.pid"; - - enable_registration = false; - enable_registration_without_verification = false; - - listeners = - [ + formatters.precise.format = "%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s"; + handlers.console = { - port = 6167; - tls = false; - type = "http"; - x_forwarded = true; - bind_adrresses = [ "127.0.0.1" ]; - resources = - [ - { - names = [ "client" "federation" ]; - compress = false; - } - ]; - } - ]; - database = - { - name = "sqlite3"; - compress = false; - args.database = "/var/lib/synapse/sqlite.db"; - }; - log_config = logConfig; - trusted_key_servers = - [ + class = "logging.StreamHandler"; + formatter = "precise"; + }; + loggers."synapse.storage.SQL" = { - server_name = "matrix.org"; - } - ]; - media_store_path = "/var/lib/synapse/media_store"; - signing_key_path = "/var/lib/synapse/signing.key"; - }; - in - pkgs.writeShellScript "conduit" - '' - [ -e /var/lib/synapse/signing.key ] || \ + level = "INFO"; + }; + root = + { + level = "INFO"; + handlers = [ "console" ]; + }; + + disable_existing_loggers = false; + }; + synapseConfig = (pkgs.formats.yaml {}).generate "synapse.yaml" + { + server_name = "matrix.redalder.org"; + report_stats = "yes"; + pid_file = "/homeserver.pid"; + + enable_registration = false; + enable_registration_without_verification = false; + + listeners = + [ + { + port = 6167; + tls = false; + type = "http"; + x_forwarded = true; + bind_adrresses = [ "127.0.0.1" ]; + resources = + [ + { + names = [ "client" "federation" ]; + compress = false; + } + ]; + } + ]; + log_config = logConfig; + trusted_key_servers = + [ + { + server_name = "matrix.org"; + } + ]; + media_store_path = "/var/lib/synapse/media_store"; + signing_key_path = "/var/lib/synapse/signing.key"; + }; + in + pkgs.writeShellScript "synapse" + '' + if [ -f "/var/lib/synapse/sqlite.db" ] && ! [ -f "/var/lib/synapse/migration_done" ] + then + echo "Beginning migration from SQLite to PostgeSQL!" + + cat > /tmp/synapse_postgres.yaml <