self-hosting/modules/postgresql.nix

92 lines
3.8 KiB
Nix
Raw Normal View History

2021-07-15 17:09:32 +02:00
{ config, lib, pkgs, ... }:
{
2021-11-29 02:04:29 +01:00
2021-07-15 17:09:32 +02:00
services.postgresql = {
enable = true;
package = pkgs.postgresql_12;
enableTCPIP = true;
2021-07-15 23:46:01 +02:00
identMap = ''
2021-07-17 00:24:30 +02:00
root_as_others root postgres
2021-07-16 03:09:29 +02:00
root_as_others root synapse
2021-07-17 00:24:30 +02:00
root_as_others root nextcloud
2021-12-27 16:39:22 +01:00
root_as_others root roundcube
2022-10-19 07:30:00 +02:00
root_as_others root wikijs-test
2021-07-15 23:46:01 +02:00
'';
2021-07-15 17:09:32 +02:00
authentication = ''
2021-07-15 23:46:01 +02:00
local all postgres peer
local all all peer map=root_as_others
host all all 10.0.1.0/24 md5
2021-07-15 17:09:32 +02:00
'';
};
2021-11-29 02:04:29 +01:00
sops.secrets = {
synapseDbPassword = {
owner = config.services.postgresql.superUser;
key = "synapse/db_password";
restartUnits = [ "postgresql-setup.service" ];
};
nextcloudDbPassword = {
owner = config.services.postgresql.superUser;
key = "nextcloud/db_password";
restartUnits = [ "postgresql-setup.service" ];
};
2021-12-27 16:39:22 +01:00
roundcubeDbPassword = {
owner = config.services.postgresql.superUser;
key = "roundcube/db_password";
restartUnits = [ "postgresql-setup.service" ];
};
2022-10-19 07:30:00 +02:00
wikiJsTestDbPassword = {
owner = config.services.postgresql.superUser;
key = "wikijs-test/db_password";
restartUnits = [ "postgresql-setup.service" ];
};
2021-11-29 02:04:29 +01:00
};
systemd.services.postgresql-setup = let pgsql = config.services.postgresql; in
{
after = [ "postgresql.service" ];
bindsTo = [ "postgresql.service" ];
wantedBy = [ "postgresql.service" ];
path = [
pgsql.package
pkgs.util-linux
];
script = ''
2022-10-19 07:30:00 +02:00
set -u
2021-11-29 02:04:29 +01:00
PSQL() {
psql --port=${toString pgsql.port} "$@"
}
2022-10-19 07:30:00 +02:00
PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname = 'synapse'" | grep -q 1 || PSQL -tAc 'CREATE ROLE "synapse"'
PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname = 'nextcloud'" | grep -q 1 || PSQL -tAc 'CREATE ROLE "nextcloud"'
PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname = 'roundcube'" | grep -q 1 || PSQL -tAc 'CREATE ROLE "roundcube"'
PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname = 'wikijs-test'" | grep -q 1 || PSQL -tAc 'CREATE ROLE "wikijs-test"'
2021-11-29 02:04:29 +01:00
PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'synapse'" | grep -q 1 || PSQL -tAc 'CREATE DATABASE "synapse" OWNER "synapse" TEMPLATE template0 LC_COLLATE = "C" LC_CTYPE = "C"'
PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'nextcloud'" | grep -q 1 || PSQL -tAc 'CREATE DATABASE "nextcloud" OWNER "nextcloud"'
2021-12-27 16:39:22 +01:00
PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'roundcube'" | grep -q 1 || PSQL -tAc 'CREATE DATABASE "roundcube" OWNER "roundcube"'
2022-10-19 07:30:00 +02:00
PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'wikijs-test'" | grep -q 1 || PSQL -tAc 'CREATE DATABASE "wikijs-test" OWNER "wikijs-test"'
PSQL -tAc "ALTER ROLE synapse LOGIN"
PSQL -tAc "ALTER ROLE nextcloud LOGIN"
PSQL -tAc "ALTER ROLE roundcube LOGIN"
PSQL -tAc "ALTER ROLE \"wikijs-test\" LOGIN"
2021-11-29 02:04:29 +01:00
synapse_password="$(<'${config.sops.secrets.synapseDbPassword.path}')"
PSQL -tAc "ALTER ROLE synapse WITH PASSWORD '$synapse_password'"
nextcloud_password="$(<'${config.sops.secrets.nextcloudDbPassword.path}')"
PSQL -tAc "ALTER ROLE nextcloud WITH PASSWORD '$nextcloud_password'"
2021-12-27 16:39:22 +01:00
roundcube_password="$(<'${config.sops.secrets.roundcubeDbPassword.path}')"
PSQL -tAc "ALTER ROLE roundcube WITH PASSWORD '$roundcube_password'"
2022-10-19 07:30:00 +02:00
wikijstest_password="$(<'${config.sops.secrets.wikiJsTestDbPassword.path}')"
PSQL -tAc "ALTER ROLE \"wikijs-test\" WITH PASSWORD '$wikijstest_password'"
2021-11-29 02:04:29 +01:00
'';
serviceConfig = {
User = pgsql.superUser;
Type = "oneshot";
RemainAfterExit = true;
};
};
2021-07-15 17:33:31 +02:00
}