migrate matrix db to own host

This commit is contained in:
XenGi 2026-02-17 17:51:46 +01:00
parent 2ba74c195d
commit 57515cab45
Signed by: xengi
SSH key fingerprint: SHA256:jxWM2RTHvxxcncXycwwWkP7HCWb4VREN05UGJTbIPZg
5 changed files with 34 additions and 26 deletions

View file

@ -6,11 +6,8 @@
../../services/openssh.nix
../../services/nginx.nix
./nginx.nix
../../services/postgres.nix
../../services/synapse.nix
../../services/draupnir.nix
../../services/prometheus.nix
../../services/grafana.nix
./synapse.nix
./draupnir.nix
];
networking = {
@ -19,11 +16,15 @@
allowedTCPPorts = [
80 # HTTP/1
443 # HTTP/2
8448 # Matrix federation
#8448 # Matrix federation
];
allowedUDPPorts = [
443 # HTTP/3
];
extraInputRules = ''
ip saddr 195.160.173.14/32 tcp dport 9009 accept comment "Allow monitoring to scrape"
ip6 saddr 2001:678:760:cccb::14/128 tcp dport 9009 accept comment "Allow monitoring to scrape"
'';
};
};

17
hosts/matrix/draupnir.nix Normal file
View file

@ -0,0 +1,17 @@
{ config, ... }:
{
services.draupnir = {
enable = true;
settings = {
homeserverUrl = "https://matrix.${config.networking.domain}";
managementRoom = "!ZYWNuaQBkkenNklCSm:matrix.org"; # #cccb-moderators:berlin.ccc.de
autojoinOnlyIfManager = true;
recordIgnoredInvites = true;
roomStateBackingStore.enabled = true;
displayReports = true;
};
secrets.accessToken = config.age.secrets.draupnir_access_token.path;
};
}

View file

@ -8,7 +8,6 @@
forceSSL = true;
enableACME = true;
locations = {
#"/.well-known/acme-challenge".root = config.security.acme.defaults.webroot;
"/".return = "418 \"🫖\"";
"~ ^(/_matrix|/_synapse/client)" = {
recommendedProxySettings = true;

74
hosts/matrix/synapse.nix Normal file
View file

@ -0,0 +1,74 @@
{ config, ... }:
{
services = {
matrix-synapse = {
enable = true;
settings = {
server_name = config.networking.domain;
public_baseurl = "https://matrix.${config.networking.domain}:443/";
# "/var/lib/matrix-synapse/homeserver.signing.key"
signing_key_path = config.age.secrets.matrix_signing_key.path;
registration_shared_secret_path = config.age.secrets.matrix_registration_shared_secret.path;
database = {
name = "psycopg2";
args = {
host = "sql.berlin.ccc.de";
port = 5432;
user = "matrix-synapse";
database = "matrix-synapse";
};
};
listeners = [
{
type = "http";
tls = false;
x_forwarded = true;
port = 8008;
bind_addresses = [ "::1" ];
#request_id_header = "X-Request-ID";
resources = [
{
compress = false;
names = [
"client"
"federation"
];
}
];
}
{
type = "metrics";
tls = false;
port = 9009;
bind_addresses = [ "::" "0.0.0.0" ];
resources = [
{
compress = false;
names = [ "metrics" ];
}
];
}
];
enable_metrics = true;
dynamic_thumbnails = true;
max_upload_size = "128M";
max_image_pixels = "64M";
retention = {
enabled = true;
default_policy = {
min_lifetime = "1d";
max_lifetime = "1y";
};
allowed_lifetime_min = "1d";
allowed_lifetime_max = "1y";
};
};
extraConfigFiles = [
config.age.secrets.matrix_db_password.path;
];
enableRegistrationScript = true;
};
};
}