{ pkgs, lib, config, ... }: let inherit (config) networking; inherit (config.services) postgresql; inherit (config.users) users; in { imports = [ postgresql/openconcerto.nix ]; services.shorewall.configs.rules = '' PostgreSQL(ACCEPT) net $FW {rate=s:5/min:10} ''; users.groups.acme.members = [ users."postgres".name ]; security.acme.certs."${networking.domain}" = { postRun = "systemctl reload postgresql"; }; systemd.services.postgresql = { wants = [ "acme-selfsigned-${networking.domain}.service" "acme-${networking.domain}.service"]; after = [ "acme-selfsigned-${networking.domain}.service" ]; }; services.postgresql = { enable = true; package = pkgs.postgresql_9_6; enableTCPIP = true; extraConfig = '' max_connections = 25 max_locks_per_transaction = 256 password_encryption = on # FIXME: replace md5 by scram-sha-256, which requires postfix >= 11 ssl = on ssl_cert_file = '/var/lib/acme/${networking.domain}/fullchain.pem' ssl_key_file = '/var/lib/acme/${networking.domain}/key.pem' unix_socket_permissions = 0770 ''; authentication = lib.mkForce '' # CONNECTION DATABASE USER AUTH OPTIONS local all postgres peer map=admin local samerole all peer map=user #local all backup peer ''; identMap = '' # MAPNAME SYSTEM-USERNAME PG-USERNAME admin postgres postgres admin root postgres user /^(.*)$ \1 ''; }; systemd.services.postgresql = { # DOC: https://wiki.postgresql.org/wiki/Shared_Database_Hosting postStart = '' set -eux # DOC: https://wiki.postgresql.org/wiki/Shared_Database_Hosting#Defining_shared_hosting $PSQL -d template1 --set ON_ERROR_STOP=1 -f - <