nixos/postgresql: move postStart into separate unit

This avoids restarting the postgresql server, when only ensureDatabases
or ensureUsers have been changed. It will also allow to properly wait
for recovery to finish later.

To wait for "postgresql is ready" in other services, we now provide a
postgresql.target.

Resolves #400018

Co-authored-by: Marcel <me@m4rc3l.de>

Changed files
+391 -424
doc
languages-frameworks
nixos
doc
manual
modules
tests
+3 -3
doc/languages-frameworks/beam.section.md
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
-
"postgresql.service"
];
# note that if you are connecting to a postgres instance on a different host
-
# postgresql.service should not be included in the requires.
requires = [
"network-online.target"
-
"postgresql.service"
];
description = "my app";
environment = {
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
+
"postgresql.target"
];
# note that if you are connecting to a postgres instance on a different host
+
# postgresql.target should not be included in the requires.
requires = [
"network-online.target"
+
"postgresql.target"
];
description = "my app";
environment = {
+5 -13
nixos/doc/manual/redirects.json
···
"module-services-postgres-initializing-extra-permissions": [
"index.html#module-services-postgres-initializing-extra-permissions"
],
-
"module-services-postgres-initializing-extra-permissions-superuser": [
-
"index.html#module-services-postgres-initializing-extra-permissions-superuser"
-
],
"module-services-postgres-initializing-extra-permissions-superuser-post-start": [
-
"index.html#module-services-postgres-initializing-extra-permissions-superuser-post-start"
-
],
-
"module-services-postgres-initializing-extra-permissions-superuser-oneshot": [
-
"index.html#module-services-postgres-initializing-extra-permissions-superuser-oneshot"
-
],
-
"module-services-postgres-initializing-extra-permissions-service-user": [
"index.html#module-services-postgres-initializing-extra-permissions-service-user"
],
-
"module-services-postgres-initializing-extra-permissions-service-user-pre-start": [
-
"index.html#module-services-postgres-initializing-extra-permissions-service-user-pre-start"
-
],
-
"module-services-postgres-initializing-extra-permissions-service-user-oneshot": [
"index.html#module-services-postgres-initializing-extra-permissions-service-user-oneshot"
],
"module-services-postgres-authentication": [
···
"module-services-postgres-initializing-extra-permissions": [
"index.html#module-services-postgres-initializing-extra-permissions"
],
"module-services-postgres-initializing-extra-permissions-superuser-post-start": [
+
"index.html#module-services-postgres-initializing-extra-permissions-superuser-post-start",
+
"index.html#module-services-postgres-initializing-extra-permissions-superuser",
+
"index.html#module-services-postgres-initializing-extra-permissions-service-user-pre-start",
"index.html#module-services-postgres-initializing-extra-permissions-service-user"
],
+
"module-services-postgres-initializing-extra-permissions-superuser-oneshot": [
+
"index.html#module-services-postgres-initializing-extra-permissions-superuser-oneshot",
"index.html#module-services-postgres-initializing-extra-permissions-service-user-oneshot"
],
"module-services-postgres-authentication": [
+2
nixos/doc/manual/release-notes/rl-2511.section.md
···
- The `yeahwm` package and `services.xserver.windowManager.yeahwm` module were removed due to the package being broken and unmaintained upstream.
- The `services.siproxd` module has been removed as `siproxd` is unmaintained and broken with libosip 5.x.
- `services.dwm-status.extraConfig` was replaced by [RFC0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md)-compliant [](#opt-services.dwm-status.settings), which is used to generate the config file. `services.dwm-status.order` is now moved to [](#opt-services.dwm-status.settings.order), as it's a part of the config file.
···
- The `yeahwm` package and `services.xserver.windowManager.yeahwm` module were removed due to the package being broken and unmaintained upstream.
+
- The `services.postgresql` module now sets up a systemd unit `postgresql.target`. Depending on `postgresql.target` guarantees that initial/ensure scripts were executed.
+
- The `services.siproxd` module has been removed as `siproxd` is unmaintained and broken with libosip 5.x.
- `services.dwm-status.extraConfig` was replaced by [RFC0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md)-compliant [](#opt-services.dwm-status.settings), which is used to generate the config file. `services.dwm-status.order` is now moved to [](#opt-services.dwm-status.settings.order), as it's a part of the config file.
+1 -1
nixos/modules/services/admin/pgadmin.nix
···
requires = [ "network.target" ];
# we're adding this optionally so just in case there's any race it'll be caught
# in case postgres doesn't start, pgadmin will just start normally
-
wants = [ "postgresql.service" ];
path = [
config.services.postgresql.package
···
requires = [ "network.target" ];
# we're adding this optionally so just in case there's any race it'll be caught
# in case postgres doesn't start, pgadmin will just start normally
+
wants = [ "postgresql.target" ];
path = [
config.services.postgresql.package
+1 -1
nixos/modules/services/backup/bacula.nix
···
systemd.services.bacula-dir = mkIf dir_cfg.enable {
after = [
"network.target"
-
"postgresql.service"
];
description = "Bacula Director Daemon";
wantedBy = [ "multi-user.target" ];
···
systemd.services.bacula-dir = mkIf dir_cfg.enable {
after = [
"network.target"
+
"postgresql.target"
];
description = "Bacula Director Daemon";
wantedBy = [ "multi-user.target" ];
+1 -1
nixos/modules/services/backup/postgresql-backup.nix
···
description = "Backup of ${db} database(s)";
-
requires = [ "postgresql.service" ];
path = [
pkgs.coreutils
···
description = "Backup of ${db} database(s)";
+
requires = [ "postgresql.target" ];
path = [
pkgs.coreutils
+2 -2
nixos/modules/services/continuous-integration/hydra/default.nix
···
systemd.services.hydra-init = {
wantedBy = [ "multi-user.target" ];
-
requires = lib.optional haveLocalDB "postgresql.service";
-
after = lib.optional haveLocalDB "postgresql.service";
environment = env // {
HYDRA_DBI = "${env.HYDRA_DBI};application_name=hydra-init";
};
···
systemd.services.hydra-init = {
wantedBy = [ "multi-user.target" ];
+
requires = lib.optional haveLocalDB "postgresql.target";
+
after = lib.optional haveLocalDB "postgresql.target";
environment = env // {
HYDRA_DBI = "${env.HYDRA_DBI};application_name=hydra-init";
};
+2 -2
nixos/modules/services/databases/pgmanage.nix
···
config = lib.mkIf cfg.enable {
systemd.services.pgmanage = {
description = "pgmanage - PostgreSQL Administration for the web";
-
wants = [ "postgresql.service" ];
-
after = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
User = pgmanage;
···
config = lib.mkIf cfg.enable {
systemd.services.pgmanage = {
description = "pgmanage - PostgreSQL Administration for the web";
+
wants = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
User = pgmanage;
+1 -1
nixos/modules/services/databases/postgres-websockets.nix
···
wants = [ "network-online.target" ];
after = [
"network-online.target"
-
"postgresql.service"
];
environment =
···
wants = [ "network-online.target" ];
after = [
"network-online.target"
+
"postgresql.target"
];
environment =
+10 -59
nixos/modules/services/databases/postgresql.md
···
**NOTE:** please make sure that any added migrations are idempotent (re-runnable).
-
#### as superuser {#module-services-postgres-initializing-extra-permissions-superuser}
-
-
**Advantage:** compatible with postgres < 15, because it's run
-
as the database superuser `postgres`.
-
##### in database `postStart` {#module-services-postgres-initializing-extra-permissions-superuser-post-start}
-
-
**Disadvantage:** need to take care of ordering yourself. In this
-
example, `mkAfter` ensures that permissions are assigned after any
-
databases from `ensureDatabases` and `extraUser1` from `ensureUsers`
-
are already created.
```nix
{
-
systemd.services.postgresql.postStart = lib.mkAfter ''
-
$PSQL service1 -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
-
$PSQL service1 -c 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "extraUser1"'
# ....
'';
}
```
-
##### in intermediate oneshot service {#module-services-postgres-initializing-extra-permissions-superuser-oneshot}
```nix
{
···
serviceConfig.Type = "oneshot";
requiredBy = "service1.service";
before = "service1.service";
-
after = "postgresql.service";
serviceConfig.User = "postgres";
-
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
path = [ postgresql ];
script = ''
-
$PSQL service1 -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
-
$PSQL service1 -c 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "extraUser1"'
-
# ....
-
'';
-
};
-
}
-
```
-
-
#### as service user {#module-services-postgres-initializing-extra-permissions-service-user}
-
-
**Advantage:** re-uses systemd's dependency ordering;
-
-
**Disadvantage:** relies on service user having grant permission. To be combined with `ensureDBOwnership`.
-
-
##### in service `preStart` {#module-services-postgres-initializing-extra-permissions-service-user-pre-start}
-
-
```nix
-
{
-
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
-
path = [ postgresql ];
-
systemd.services."service1".preStart = ''
-
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
-
$PSQL -c 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "extraUser1"'
-
# ....
-
'';
-
}
-
```
-
-
##### in intermediate oneshot service {#module-services-postgres-initializing-extra-permissions-service-user-oneshot}
-
-
```nix
-
{
-
systemd.services."migrate-service1-db1" = {
-
serviceConfig.Type = "oneshot";
-
requiredBy = "service1.service";
-
before = "service1.service";
-
after = "postgresql.service";
-
serviceConfig.User = "service1";
-
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
-
path = [ postgresql ];
-
script = ''
-
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
-
$PSQL -c 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "extraUser1"'
# ....
'';
};
···
**NOTE:** please make sure that any added migrations are idempotent (re-runnable).
+
#### in database's setup `postStart` {#module-services-postgres-initializing-extra-permissions-superuser-post-start}
+
`ensureUsers` is run in `postgresql-setup`, so this is where `postStart` must be added to:
```nix
{
+
systemd.services.postgresql-setup.postStart = ''
+
psql service1 -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
+
psql service1 -c 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "extraUser1"'
# ....
'';
}
```
+
#### in intermediate oneshot service {#module-services-postgres-initializing-extra-permissions-superuser-oneshot}
```nix
{
···
serviceConfig.Type = "oneshot";
requiredBy = "service1.service";
before = "service1.service";
+
after = "postgresql.target";
serviceConfig.User = "postgres";
+
environment.PGPORT = toString services.postgresql.settings.port;
path = [ postgresql ];
script = ''
+
psql service1 -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
+
psql service1 -c 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "extraUser1"'
# ....
'';
};
+70 -44
nixos/modules/services/databases/postgresql.nix
···
cfg.checkConfig && pkgs.stdenv.hostPlatform == pkgs.stdenv.buildPlatform
) configFileCheck;
systemd.services.postgresql = {
description = "PostgreSQL Server";
-
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
environment.PGDATA = cfg.dataDir;
···
ln -sfn "${configFile}/postgresql.conf" "${cfg.dataDir}/postgresql.conf"
'';
-
-
# Wait for PostgreSQL to be ready to accept connections.
-
postStart =
-
''
-
PSQL="psql --port=${builtins.toString cfg.settings.port}"
-
-
while ! $PSQL -d postgres -c "" 2> /dev/null; do
-
if ! kill -0 "$MAINPID"; then exit 1; fi
-
sleep 0.1
-
done
-
-
if test -e "${cfg.dataDir}/.first_startup"; then
-
${optionalString (cfg.initialScript != null) ''
-
$PSQL -f "${cfg.initialScript}" -d postgres
-
''}
-
rm -f "${cfg.dataDir}/.first_startup"
-
fi
-
''
-
+ optionalString (cfg.ensureDatabases != [ ]) ''
-
${concatMapStrings (database: ''
-
$PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = '${database}'" | grep -q 1 || $PSQL -tAc 'CREATE DATABASE "${database}"'
-
'') cfg.ensureDatabases}
-
''
-
+ ''
-
${concatMapStrings (
-
user:
-
let
-
dbOwnershipStmt = optionalString user.ensureDBOwnership ''$PSQL -tAc 'ALTER DATABASE "${user.name}" OWNER TO "${user.name}";' '';
-
-
filteredClauses = filterAttrs (name: value: value != null) user.ensureClauses;
-
-
clauseSqlStatements = attrValues (mapAttrs (n: v: if v then n else "no${n}") filteredClauses);
-
-
userClauses = ''$PSQL -tAc 'ALTER ROLE "${user.name}" ${concatStringsSep " " clauseSqlStatements}' '';
-
in
-
''
-
$PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname='${user.name}'" | grep -q 1 || $PSQL -tAc 'CREATE USER "${user.name}"'
-
${userClauses}
-
-
${dbOwnershipStmt}
-
''
-
) cfg.ensureUsers}
-
'';
serviceConfig = mkMerge [
{
···
];
unitConfig.RequiresMountsFor = "${cfg.dataDir}";
};
};
···
cfg.checkConfig && pkgs.stdenv.hostPlatform == pkgs.stdenv.buildPlatform
) configFileCheck;
+
systemd.targets.postgresql = {
+
description = "PostgreSQL";
+
wantedBy = [ "multi-user.target" ];
+
bindsTo = [
+
"postgresql.service"
+
"postgresql-setup.service"
+
];
+
};
+
systemd.services.postgresql = {
description = "PostgreSQL Server";
after = [ "network.target" ];
+
+
# To trigger the .target also on "systemctl start postgresql".
+
bindsTo = [ "postgresql.target" ];
environment.PGDATA = cfg.dataDir;
···
ln -sfn "${configFile}/postgresql.conf" "${cfg.dataDir}/postgresql.conf"
'';
serviceConfig = mkMerge [
{
···
];
unitConfig.RequiresMountsFor = "${cfg.dataDir}";
+
};
+
+
systemd.services.postgresql-setup = {
+
description = "PostgreSQL Setup Scripts";
+
+
requires = [ "postgresql.service" ];
+
after = [ "postgresql.service" ];
+
+
serviceConfig = {
+
User = "postgres";
+
Group = "postgres";
+
Type = "oneshot";
+
RemainAfterExit = true;
+
};
+
+
path = [ cfg.finalPackage ];
+
environment.PGPORT = builtins.toString cfg.settings.port;
+
+
# Wait for PostgreSQL to be ready to accept connections.
+
script =
+
''
+
while ! psql -d postgres -c "" 2> /dev/null; do
+
if ! systemctl is-active --quiet postgresql.service; then exit 1; fi
+
sleep 0.1
+
done
+
+
if test -e "${cfg.dataDir}/.first_startup"; then
+
${optionalString (cfg.initialScript != null) ''
+
psql -f "${cfg.initialScript}" -d postgres
+
''}
+
rm -f "${cfg.dataDir}/.first_startup"
+
fi
+
''
+
+ optionalString (cfg.ensureDatabases != [ ]) ''
+
${concatMapStrings (database: ''
+
psql -tAc "SELECT 1 FROM pg_database WHERE datname = '${database}'" | grep -q 1 || psql -tAc 'CREATE DATABASE "${database}"'
+
'') cfg.ensureDatabases}
+
''
+
+ ''
+
${concatMapStrings (
+
user:
+
let
+
dbOwnershipStmt = optionalString user.ensureDBOwnership ''psql -tAc 'ALTER DATABASE "${user.name}" OWNER TO "${user.name}";' '';
+
+
filteredClauses = filterAttrs (name: value: value != null) user.ensureClauses;
+
+
clauseSqlStatements = attrValues (mapAttrs (n: v: if v then n else "no${n}") filteredClauses);
+
+
userClauses = ''psql -tAc 'ALTER ROLE "${user.name}" ${concatStringsSep " " clauseSqlStatements}' '';
+
in
+
''
+
psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${user.name}'" | grep -q 1 || psql -tAc 'CREATE USER "${user.name}"'
+
${userClauses}
+
+
${dbOwnershipStmt}
+
''
+
) cfg.ensureUsers}
+
'';
};
};
+1 -1
nixos/modules/services/databases/postgrest.nix
···
wants = [ "network-online.target" ];
after = [
"network-online.target"
-
"postgresql.service"
];
serviceConfig = {
···
wants = [ "network-online.target" ];
after = [
"network-online.target"
+
"postgresql.target"
];
serviceConfig = {
+2 -2
nixos/modules/services/development/zammad.nix
···
"systemd-tmpfiles-setup.service"
]
++ lib.optionals (cfg.database.createLocally) [
-
"postgresql.service"
]
++ lib.optionals cfg.redis.createLocally [
"redis-${cfg.redis.name}.service"
];
requires = lib.optionals (cfg.database.createLocally) [
-
"postgresql.service"
];
description = "Zammad web";
wantedBy = [ "multi-user.target" ];
···
"systemd-tmpfiles-setup.service"
]
++ lib.optionals (cfg.database.createLocally) [
+
"postgresql.target"
]
++ lib.optionals cfg.redis.createLocally [
"redis-${cfg.redis.name}.service"
];
requires = lib.optionals (cfg.database.createLocally) [
+
"postgresql.target"
];
description = "Zammad web";
wantedBy = [ "multi-user.target" ];
+2 -2
nixos/modules/services/finance/libeufin/common.nix
···
echo "Bank initialisation complete"
fi
'';
-
requires = lib.optionals cfg.createLocalDatabase [ "postgresql.service" ];
-
after = [ "network.target" ] ++ lib.optionals cfg.createLocalDatabase [ "postgresql.service" ];
};
};
···
echo "Bank initialisation complete"
fi
'';
+
requires = lib.optionals cfg.createLocalDatabase [ "postgresql.target" ];
+
after = [ "network.target" ] ++ lib.optionals cfg.createLocalDatabase [ "postgresql.target" ];
};
};
+2 -2
nixos/modules/services/finance/odoo.nix
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
-
"postgresql.service"
];
# pg_dump
path = [ config.services.postgresql.package ];
-
requires = [ "postgresql.service" ];
serviceConfig = {
ExecStart = "${cfg.package}/bin/odoo";
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
+
"postgresql.target"
];
# pg_dump
path = [ config.services.postgresql.package ];
+
requires = [ "postgresql.target" ];
serviceConfig = {
ExecStart = "${cfg.package}/bin/odoo";
+2 -2
nixos/modules/services/finance/taler/common.nix
···
Restart = "on-failure";
RestartSec = "5s";
};
-
requires = [ "postgresql.service" ];
-
after = [ "postgresql.service" ];
};
}
];
···
Restart = "on-failure";
RestartSec = "5s";
};
+
requires = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
};
}
];
+1 -1
nixos/modules/services/home-automation/home-assistant.nix
···
# prevent races with database creation
"mysql.service"
-
"postgresql.service"
];
reloadTriggers =
optionals (cfg.config != null) [ configFile ]
···
# prevent races with database creation
"mysql.service"
+
"postgresql.target"
];
reloadTriggers =
optionals (cfg.config != null) [ configFile ]
+1 -1
nixos/modules/services/mail/dspam.nix
···
systemd.services.dspam = {
description = "dspam spam filtering daemon";
wantedBy = [ "multi-user.target" ];
-
after = [ "postgresql.service" ];
restartTriggers = [ cfgfile ];
serviceConfig = {
···
systemd.services.dspam = {
description = "dspam spam filtering daemon";
wantedBy = [ "multi-user.target" ];
+
after = [ "postgresql.target" ];
restartTriggers = [ cfgfile ];
serviceConfig = {
+1 -1
nixos/modules/services/mail/listmonk.nix
···
systemd.services.listmonk = {
description = "Listmonk - newsletter and mailing list manager";
-
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "exec";
···
systemd.services.listmonk = {
description = "Listmonk - newsletter and mailing list manager";
+
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.target";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "exec";
+6 -6
nixos/modules/services/mail/mailman.nix
···
after =
[ "network.target" ]
++ lib.optional cfg.enablePostfix "postfix-setup.service"
-
++ lib.optional withPostgresql "postgresql.service";
restartTriggers = [ mailmanCfgFile ];
-
requires = lib.optional withPostgresql "postgresql.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${mailmanEnv}/bin/mailman start";
···
"hyperkitty.service"
];
path = with pkgs; [ jq ];
-
after = lib.optional withPostgresql "postgresql.service";
-
requires = lib.optional withPostgresql "postgresql.service";
serviceConfig.RemainAfterExit = true;
serviceConfig.Type = "oneshot";
script = ''
···
in
{
wantedBy = [ "multi-user.target" ];
-
after = lib.optional withPostgresql "postgresql.service";
requires = [
"mailman-uwsgi.socket"
"mailman-web-setup.service"
-
] ++ lib.optional withPostgresql "postgresql.service";
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
# Since the mailman-web settings.py obstinately creates a logs
···
after =
[ "network.target" ]
++ lib.optional cfg.enablePostfix "postfix-setup.service"
+
++ lib.optional withPostgresql "postgresql.target";
restartTriggers = [ mailmanCfgFile ];
+
requires = lib.optional withPostgresql "postgresql.target";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${mailmanEnv}/bin/mailman start";
···
"hyperkitty.service"
];
path = with pkgs; [ jq ];
+
after = lib.optional withPostgresql "postgresql.target";
+
requires = lib.optional withPostgresql "postgresql.target";
serviceConfig.RemainAfterExit = true;
serviceConfig.Type = "oneshot";
script = ''
···
in
{
wantedBy = [ "multi-user.target" ];
+
after = lib.optional withPostgresql "postgresql.target";
requires = [
"mailman-uwsgi.socket"
"mailman-web-setup.service"
+
] ++ lib.optional withPostgresql "postgresql.target";
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
# Since the mailman-web settings.py obstinately creates a logs
+2 -2
nixos/modules/services/mail/postfixadmin.nix
···
# objects owners and extensions; for now we tack on what's needed
# here.
systemd.services.postfixadmin-postgres = lib.mkIf localDB {
-
after = [ "postgresql.service" ];
-
bindsTo = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
path = [
pgsql.package
···
# objects owners and extensions; for now we tack on what's needed
# here.
systemd.services.postfixadmin-postgres = lib.mkIf localDB {
+
after = [ "postgresql.target" ];
+
bindsTo = [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
path = [
pgsql.package
+2 -2
nixos/modules/services/mail/roundcube.nix
···
systemd.services.roundcube-setup = lib.mkMerge [
(lib.mkIf localDB {
-
requires = [ "postgresql.service" ];
-
after = [ "postgresql.service" ];
})
{
wants = [ "network-online.target" ];
···
systemd.services.roundcube-setup = lib.mkMerge [
(lib.mkIf localDB {
+
requires = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
})
{
wants = [ "network-online.target" ];
+1 -1
nixos/modules/services/matrix/appservice-irc.nix
···
description = "Matrix-IRC bridge";
before = [ "matrix-synapse.service" ]; # So the registration can be used by Synapse
after = lib.optionals (cfg.settings.database.engine == "postgres") [
-
"postgresql.service"
];
wantedBy = [ "multi-user.target" ];
···
description = "Matrix-IRC bridge";
before = [ "matrix-synapse.service" ]; # So the registration can be used by Synapse
after = lib.optionals (cfg.settings.database.engine == "postgres") [
+
"postgresql.target"
];
wantedBy = [ "multi-user.target" ];
+1 -1
nixos/modules/services/matrix/maubot.nix
···
systemd.services.maubot = rec {
description = "maubot - a plugin-based Matrix bot system written in Python";
-
after = [ "network.target" ] ++ wants ++ lib.optional hasLocalPostgresDB "postgresql.service";
# all plugins get automatically disabled if maubot starts before synapse
wants = lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit;
wantedBy = [ "multi-user.target" ];
···
systemd.services.maubot = rec {
description = "maubot - a plugin-based Matrix bot system written in Python";
+
after = [ "network.target" ] ++ wants ++ lib.optional hasLocalPostgresDB "postgresql.target";
# all plugins get automatically disabled if maubot starts before synapse
wants = lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit;
wantedBy = [ "multi-user.target" ];
+1 -1
nixos/modules/services/matrix/synapse-auto-compressor.nix
···
systemd.services.synapse-auto-compressor = {
description = "synapse-auto-compressor";
requires = lib.optionals synapseUsesLocalPostgresql [
-
"postgresql.service"
];
inherit (cfg) startAt;
serviceConfig = {
···
systemd.services.synapse-auto-compressor = {
description = "synapse-auto-compressor";
requires = lib.optionals synapseUsesLocalPostgresql [
+
"postgresql.target"
];
inherit (cfg) startAt;
serviceConfig = {
+4 -4
nixos/modules/services/matrix/synapse.nix
···
systemd.targets.matrix-synapse = lib.mkIf hasWorkers {
description = "Synapse Matrix parent target";
wants = [ "network-online.target" ];
-
after = [ "network-online.target" ] ++ optional hasLocalPostgresDB "postgresql.service";
wantedBy = [ "multi-user.target" ];
};
···
partOf = [ "matrix-synapse.target" ];
wantedBy = [ "matrix-synapse.target" ];
unitConfig.ReloadPropagatedFrom = "matrix-synapse.target";
-
requires = optional hasLocalPostgresDB "postgresql.service";
}
else
{
wants = [ "network-online.target" ];
-
after = [ "network-online.target" ] ++ optional hasLocalPostgresDB "postgresql.service";
-
requires = optional hasLocalPostgresDB "postgresql.service";
wantedBy = [ "multi-user.target" ];
};
baseServiceConfig = {
···
systemd.targets.matrix-synapse = lib.mkIf hasWorkers {
description = "Synapse Matrix parent target";
wants = [ "network-online.target" ];
+
after = [ "network-online.target" ] ++ optional hasLocalPostgresDB "postgresql.target";
wantedBy = [ "multi-user.target" ];
};
···
partOf = [ "matrix-synapse.target" ];
wantedBy = [ "matrix-synapse.target" ];
unitConfig.ReloadPropagatedFrom = "matrix-synapse.target";
+
requires = optional hasLocalPostgresDB "postgresql.target";
}
else
{
wants = [ "network-online.target" ];
+
after = [ "network-online.target" ] ++ optional hasLocalPostgresDB "postgresql.target";
+
requires = optional hasLocalPostgresDB "postgresql.target";
wantedBy = [ "multi-user.target" ];
};
baseServiceConfig = {
+3 -3
nixos/modules/services/misc/atuin.nix
···
systemd.services.atuin = {
description = "atuin server";
-
requires = lib.optionals cfg.database.createLocally [ "postgresql.service" ];
after = [
"network-online.target"
-
] ++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
wants = [
"network-online.target"
-
] ++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
···
systemd.services.atuin = {
description = "atuin server";
+
requires = lib.optionals cfg.database.createLocally [ "postgresql.target" ];
after = [
"network-online.target"
+
] ++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
wants = [
"network-online.target"
+
] ++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
+1 -1
nixos/modules/services/misc/disnix.nix
···
[ "dbus.service" ]
++ lib.optional config.services.httpd.enable "httpd.service"
++ lib.optional config.services.mysql.enable "mysql.service"
-
++ lib.optional config.services.postgresql.enable "postgresql.service"
++ lib.optional config.services.tomcat.enable "tomcat.service"
++ lib.optional config.services.svnserve.enable "svnserve.service"
++ lib.optional config.services.mongodb.enable "mongodb.service"
···
[ "dbus.service" ]
++ lib.optional config.services.httpd.enable "httpd.service"
++ lib.optional config.services.mysql.enable "mysql.service"
+
++ lib.optional config.services.postgresql.enable "postgresql.target"
++ lib.optional config.services.tomcat.enable "tomcat.service"
++ lib.optional config.services.svnserve.enable "svnserve.service"
++ lib.optional config.services.mongodb.enable "mongodb.service"
+2 -2
nixos/modules/services/misc/forgejo.nix
···
"network.target"
]
++ optionals usePostgresql [
-
"postgresql.service"
]
++ optionals useMysql [
"mysql.service"
···
];
requires =
optionals (cfg.database.createDatabase && usePostgresql) [
-
"postgresql.service"
]
++ optionals (cfg.database.createDatabase && useMysql) [
"mysql.service"
···
"network.target"
]
++ optionals usePostgresql [
+
"postgresql.target"
]
++ optionals useMysql [
"mysql.service"
···
];
requires =
optionals (cfg.database.createDatabase && usePostgresql) [
+
"postgresql.target"
]
++ optionals (cfg.database.createDatabase && useMysql) [
"mysql.service"
+1 -1
nixos/modules/services/misc/gammu-smsd.nix
···
wants =
with cfg.backend;
-
[ ] ++ lib.optionals (service == "sql" && sql.driver == "native_pgsql") [ "postgresql.service" ];
preStart =
with cfg.backend;
···
wants =
with cfg.backend;
+
[ ] ++ lib.optionals (service == "sql" && sql.driver == "native_pgsql") [ "postgresql.target" ];
preStart =
with cfg.backend;
+2 -2
nixos/modules/services/misc/gitea.nix
···
description = "gitea";
after =
[ "network.target" ]
-
++ optional usePostgresql "postgresql.service"
++ optional useMysql "mysql.service";
requires =
-
optional (cfg.database.createDatabase && usePostgresql) "postgresql.service"
++ optional (cfg.database.createDatabase && useMysql) "mysql.service";
wantedBy = [ "multi-user.target" ];
path = [
···
description = "gitea";
after =
[ "network.target" ]
+
++ optional usePostgresql "postgresql.target"
++ optional useMysql "mysql.service";
requires =
+
optional (cfg.database.createDatabase && usePostgresql) "postgresql.target"
++ optional (cfg.database.createDatabase && useMysql) "mysql.service";
wantedBy = [ "multi-user.target" ];
path = [
+9 -9
nixos/modules/services/misc/gitlab.nix
···
pgsql = config.services.postgresql;
in
mkIf databaseActuallyCreateLocally {
-
after = [ "postgresql.service" ];
-
bindsTo = [ "postgresql.service" ];
wantedBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
path = [
···
systemd.services.gitlab-db-config = {
after = [
"gitlab-config.service"
-
"gitlab-postgresql.service"
-
"postgresql.service"
];
wants =
-
optional (cfg.databaseHost == "") "postgresql.service"
-
++ optional databaseActuallyCreateLocally "gitlab-postgresql.service";
bindsTo = [ "gitlab-config.service" ];
wantedBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
···
after = [
"network.target"
"redis-gitlab.service"
-
"postgresql.service"
"gitlab-config.service"
"gitlab-db-config.service"
];
···
"gitlab-config.service"
"gitlab-db-config.service"
];
-
wants = [ "redis-gitlab.service" ] ++ optional (cfg.databaseHost == "") "postgresql.service";
wantedBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
environment =
···
"gitlab-config.service"
"gitlab-db-config.service"
];
-
wants = [ "redis-gitlab.service" ] ++ optional (cfg.databaseHost == "") "postgresql.service";
requiredBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
environment = gitlabEnv;
···
pgsql = config.services.postgresql;
in
mkIf databaseActuallyCreateLocally {
+
after = [ "postgresql.target" ];
+
bindsTo = [ "postgresql.target" ];
wantedBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
path = [
···
systemd.services.gitlab-db-config = {
after = [
"gitlab-config.service"
+
"gitlab-postgresql.target"
+
"postgresql.target"
];
wants =
+
optional (cfg.databaseHost == "") "postgresql.target"
+
++ optional databaseActuallyCreateLocally "gitlab-postgresql.target";
bindsTo = [ "gitlab-config.service" ];
wantedBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
···
after = [
"network.target"
"redis-gitlab.service"
+
"postgresql.target"
"gitlab-config.service"
"gitlab-db-config.service"
];
···
"gitlab-config.service"
"gitlab-db-config.service"
];
+
wants = [ "redis-gitlab.service" ] ++ optional (cfg.databaseHost == "") "postgresql.target";
wantedBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
environment =
···
"gitlab-config.service"
"gitlab-db-config.service"
];
+
wants = [ "redis-gitlab.service" ] ++ optional (cfg.databaseHost == "") "postgresql.target";
requiredBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
environment = gitlabEnv;
+8 -8
nixos/modules/services/misc/paperless.nix
···
fi
fi
'';
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
after =
lib.optional enableRedis "redis-paperless.service"
-
++ lib.optional cfg.database.createLocally "postgresql.service";
};
systemd.services.paperless-task-queue = {
description = "Paperless Celery Workers";
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
after = [
"paperless-scheduler.service"
-
] ++ lib.optional cfg.database.createLocally "postgresql.service";
serviceConfig = defaultServiceConfig // {
User = cfg.user;
ExecStart = "${cfg.package}/bin/celery --app paperless worker --loglevel INFO";
···
# Bind to `paperless-scheduler` so that the consumer never runs
# during migrations
bindsTo = [ "paperless-scheduler.service" ];
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
after = [
"paperless-scheduler.service"
-
] ++ lib.optional cfg.database.createLocally "postgresql.service";
serviceConfig = defaultServiceConfig // {
User = cfg.user;
ExecStart = "${cfg.package}/bin/paperless-ngx document_consumer";
···
# Bind to `paperless-scheduler` so that the web server never runs
# during migrations
bindsTo = [ "paperless-scheduler.service" ];
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
after = [
"paperless-scheduler.service"
-
] ++ lib.optional cfg.database.createLocally "postgresql.service";
# Setup PAPERLESS_SECRET_KEY.
# If this environment variable is left unset, paperless-ngx defaults
# to a well-known value, which is insecure.
···
fi
fi
'';
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after =
lib.optional enableRedis "redis-paperless.service"
+
++ lib.optional cfg.database.createLocally "postgresql.target";
};
systemd.services.paperless-task-queue = {
description = "Paperless Celery Workers";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after = [
"paperless-scheduler.service"
+
] ++ lib.optional cfg.database.createLocally "postgresql.target";
serviceConfig = defaultServiceConfig // {
User = cfg.user;
ExecStart = "${cfg.package}/bin/celery --app paperless worker --loglevel INFO";
···
# Bind to `paperless-scheduler` so that the consumer never runs
# during migrations
bindsTo = [ "paperless-scheduler.service" ];
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after = [
"paperless-scheduler.service"
+
] ++ lib.optional cfg.database.createLocally "postgresql.target";
serviceConfig = defaultServiceConfig // {
User = cfg.user;
ExecStart = "${cfg.package}/bin/paperless-ngx document_consumer";
···
# Bind to `paperless-scheduler` so that the web server never runs
# during migrations
bindsTo = [ "paperless-scheduler.service" ];
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after = [
"paperless-scheduler.service"
+
] ++ lib.optional cfg.database.createLocally "postgresql.target";
# Setup PAPERLESS_SECRET_KEY.
# If this environment variable is left unset, paperless-ngx defaults
# to a well-known value, which is insecure.
+1 -1
nixos/modules/services/misc/redmine.nix
···
after =
[ "network.target" ]
++ lib.optional mysqlLocal "mysql.service"
-
++ lib.optional pgsqlLocal "postgresql.service";
wantedBy = [ "multi-user.target" ];
environment.RAILS_ENV = "production";
environment.RAILS_CACHE = "${cfg.stateDir}/cache";
···
after =
[ "network.target" ]
++ lib.optional mysqlLocal "mysql.service"
+
++ lib.optional pgsqlLocal "postgresql.target";
wantedBy = [ "multi-user.target" ];
environment.RAILS_ENV = "production";
environment.RAILS_CACHE = "${cfg.stateDir}/cache";
+5 -7
nixos/modules/services/misc/sourcehut/service.nix
···
{
after =
[ "network.target" ]
-
++ optional cfg.postgresql.enable "postgresql.service"
++ optional cfg.redis.enable "redis-sourcehut-${srvsrht}.service";
requires =
-
optional cfg.postgresql.enable "postgresql.service"
++ optional cfg.redis.enable "redis-sourcehut-${srvsrht}.service";
path = [ pkgs.gawk ];
environment.HOME = runDir;
···
&& lib.strings.versionAtLeast config.services.postgresql.package.version "15.0"
)
{
-
postgresql.postStart = (
-
lib.mkAfter ''
-
$PSQL -tAc 'ALTER DATABASE "${srvCfg.postgresql.database}" OWNER TO "${srvCfg.user}";'
-
''
-
);
}
)
];
···
{
after =
[ "network.target" ]
+
++ optional cfg.postgresql.enable "postgresql.target"
++ optional cfg.redis.enable "redis-sourcehut-${srvsrht}.service";
requires =
+
optional cfg.postgresql.enable "postgresql.target"
++ optional cfg.redis.enable "redis-sourcehut-${srvsrht}.service";
path = [ pkgs.gawk ];
environment.HOME = runDir;
···
&& lib.strings.versionAtLeast config.services.postgresql.package.version "15.0"
)
{
+
postgresql-setup.postStart = ''
+
psql -tAc 'ALTER DATABASE "${srvCfg.postgresql.database}" OWNER TO "${srvCfg.user}";'
+
'';
}
)
];
+1 -1
nixos/modules/services/monitoring/grafana.nix
···
wantedBy = [ "multi-user.target" ];
after =
[ "networking.target" ]
-
++ lib.optional usePostgresql "postgresql.service"
++ lib.optional useMysql "mysql.service";
script = ''
set -o errexit -o pipefail -o nounset -o errtrace
···
wantedBy = [ "multi-user.target" ];
after =
[ "networking.target" ]
+
++ lib.optional usePostgresql "postgresql.target"
++ lib.optional useMysql "mysql.service";
script = ''
set -o errexit -o pipefail -o nounset -o errtrace
+1 -1
nixos/modules/services/monitoring/zabbix-proxy.nix
···
description = "Zabbix Proxy";
wantedBy = [ "multi-user.target" ];
-
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service";
path = [ "/run/wrappers" ] ++ cfg.extraPackages;
preStart =
···
description = "Zabbix Proxy";
wantedBy = [ "multi-user.target" ];
+
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
path = [ "/run/wrappers" ] ++ cfg.extraPackages;
preStart =
+2 -2
nixos/modules/services/monitoring/zabbix-server.nix
···
description = "Zabbix Server";
wantedBy = [ "multi-user.target" ];
-
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service";
path = [ "/run/wrappers" ] ++ cfg.extraPackages;
preStart =
···
systemd.services.httpd.after =
optional (config.services.zabbixWeb.enable && mysqlLocal) "mysql.service"
-
++ optional (config.services.zabbixWeb.enable && pgsqlLocal) "postgresql.service";
};
···
description = "Zabbix Server";
wantedBy = [ "multi-user.target" ];
+
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
path = [ "/run/wrappers" ] ++ cfg.extraPackages;
preStart =
···
systemd.services.httpd.after =
optional (config.services.zabbixWeb.enable && mysqlLocal) "mysql.service"
+
++ optional (config.services.zabbixWeb.enable && pgsqlLocal) "postgresql.target";
};
+2 -2
nixos/modules/services/networking/atticd.nix
···
systemd.services.atticd = {
wantedBy = [ "multi-user.target" ];
-
after = [ "network-online.target" ] ++ lib.optionals hasLocalPostgresDB [ "postgresql.service" ];
-
requires = lib.optionals hasLocalPostgresDB [ "postgresql.service" ];
wants = [ "network-online.target" ];
serviceConfig = {
···
systemd.services.atticd = {
wantedBy = [ "multi-user.target" ];
+
after = [ "network-online.target" ] ++ lib.optionals hasLocalPostgresDB [ "postgresql.target" ];
+
requires = lib.optionals hasLocalPostgresDB [ "postgresql.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
+2 -2
nixos/modules/services/networking/firezone/server.nix
···
systemd.services.firezone-initialize = {
description = "Backend initialization service for the Firezone zero-trust access platform";
-
after = mkIf cfg.enableLocalDB [ "postgresql.service" ];
-
requires = mkIf cfg.enableLocalDB [ "postgresql.service" ];
wantedBy = [ "firezone.target" ];
partOf = [ "firezone.target" ];
···
systemd.services.firezone-initialize = {
description = "Backend initialization service for the Firezone zero-trust access platform";
+
after = mkIf cfg.enableLocalDB [ "postgresql.target" ];
+
requires = mkIf cfg.enableLocalDB [ "postgresql.target" ];
wantedBy = [ "firezone.target" ];
partOf = [ "firezone.target" ];
+1 -1
nixos/modules/services/networking/pleroma.nix
···
wants = [ "network-online.target" ];
after = [
"network-online.target"
-
"postgresql.service"
];
wantedBy = [ "pleroma.service" ];
environment.RELEASE_COOKIE = "/var/lib/pleroma/.cookie";
···
wants = [ "network-online.target" ];
after = [
"network-online.target"
+
"postgresql.target"
];
wantedBy = [ "pleroma.service" ];
environment.RELEASE_COOKIE = "/var/lib/pleroma/.cookie";
+1 -1
nixos/modules/services/networking/powerdns.nix
···
after = [
"network.target"
"mysql.service"
-
"postgresql.service"
"openldap.service"
];
···
after = [
"network.target"
"mysql.service"
+
"postgresql.target"
"openldap.service"
];
+1 -1
nixos/modules/services/networking/quassel.nix
···
wantedBy = [ "multi-user.target" ];
after =
[ "network.target" ]
-
++ optional config.services.postgresql.enable "postgresql.service"
++ optional config.services.mysql.enable "mysql.service";
serviceConfig = {
···
wantedBy = [ "multi-user.target" ];
after =
[ "network.target" ]
+
++ optional config.services.postgresql.enable "postgresql.target"
++ optional config.services.mysql.enable "mysql.service";
serviceConfig = {
+2 -2
nixos/modules/services/security/canaille.nix
···
systemd.services.canaille-install = {
# We want this on boot, not on socket activation
wantedBy = [ "multi-user.target" ];
-
after = optional createLocalPostgresqlDb "postgresql.service";
serviceConfig = commonServiceConfig // {
Type = "oneshot";
ExecStart = "${getExe finalPackage} install";
···
after = [
"network.target"
"canaille-install.service"
-
] ++ optional createLocalPostgresqlDb "postgresql.service";
requires = [
"canaille-install.service"
"canaille.socket"
···
systemd.services.canaille-install = {
# We want this on boot, not on socket activation
wantedBy = [ "multi-user.target" ];
+
after = optional createLocalPostgresqlDb "postgresql.target";
serviceConfig = commonServiceConfig // {
Type = "oneshot";
ExecStart = "${getExe finalPackage} install";
···
after = [
"network.target"
"canaille-install.service"
+
] ++ optional createLocalPostgresqlDb "postgresql.target";
requires = [
"canaille-install.service"
"canaille.socket"
+2 -2
nixos/modules/services/torrent/bitmagnet.nix
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
-
] ++ optional cfg.useLocalPostgresDB "postgresql.service";
-
requires = optional cfg.useLocalPostgresDB "postgresql.service";
serviceConfig = {
Type = "simple";
DynamicUser = true;
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
+
] ++ optional cfg.useLocalPostgresDB "postgresql.target";
+
requires = optional cfg.useLocalPostgresDB "postgresql.target";
serviceConfig = {
Type = "simple";
DynamicUser = true;
+2 -2
nixos/modules/services/web-apps/akkoma.nix
···
requiredBy = [ "akkoma.service" ];
after = [
"akkoma-config.service"
-
"postgresql.service"
];
before = [ "akkoma.service" ];
···
"akkoma-config.target"
"network.target"
"network-online.target"
-
"postgresql.service"
];
confinement.packages = mkIf isConfined runtimeInputs;
···
requiredBy = [ "akkoma.service" ];
after = [
"akkoma-config.service"
+
"postgresql.target"
];
before = [ "akkoma.service" ];
···
"akkoma-config.target"
"network.target"
"network-online.target"
+
"postgresql.target"
];
confinement.packages = mkIf isConfined runtimeInputs;
+1 -1
nixos/modules/services/web-apps/crabfit.nix
···
description = "The API for Crab Fit.";
wantedBy = [ "multi-user.target" ];
-
after = [ "postgresql.service" ];
serviceConfig = {
# TODO: harden
···
description = "The API for Crab Fit.";
wantedBy = [ "multi-user.target" ];
+
after = [ "postgresql.target" ];
serviceConfig = {
# TODO: harden
+3 -3
nixos/modules/services/web-apps/davis.nix
···
before = [ "phpfpm-davis.service" ];
after =
lib.optional mysqlLocal "mysql.service"
-
++ lib.optional pgsqlLocal "postgresql.service"
++ [ "davis-env-setup.service" ];
requires =
lib.optional mysqlLocal "mysql.service"
-
++ lib.optional pgsqlLocal "postgresql.service"
++ [ "davis-env-setup.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = defaultServiceConfig // {
···
"davis-db-migrate.service"
]
++ lib.optional mysqlLocal "mysql.service"
-
++ lib.optional pgsqlLocal "postgresql.service";
systemd.services.phpfpm-davis.serviceConfig.ReadWritePaths = [ cfg.dataDir ];
services.nginx = lib.mkIf (cfg.nginx != null) {
···
before = [ "phpfpm-davis.service" ];
after =
lib.optional mysqlLocal "mysql.service"
+
++ lib.optional pgsqlLocal "postgresql.target"
++ [ "davis-env-setup.service" ];
requires =
lib.optional mysqlLocal "mysql.service"
+
++ lib.optional pgsqlLocal "postgresql.target"
++ [ "davis-env-setup.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = defaultServiceConfig // {
···
"davis-db-migrate.service"
]
++ lib.optional mysqlLocal "mysql.service"
+
++ lib.optional pgsqlLocal "postgresql.target";
systemd.services.phpfpm-davis.serviceConfig.ReadWritePaths = [ cfg.dataDir ];
services.nginx = lib.mkIf (cfg.nginx != null) {
+3 -3
nixos/modules/services/web-apps/dependency-track.nix
···
};
systemd.services.dependency-track-postgresql-init = lib.mkIf cfg.database.createLocally {
-
after = [ "postgresql.service" ];
before = [ "dependency-track.service" ];
-
bindsTo = [ "postgresql.service" ];
path = [ config.services.postgresql.package ];
serviceConfig = {
Type = "oneshot";
···
if cfg.database.createLocally then
[
"dependency-track-postgresql-init.service"
-
"postgresql.service"
]
else
[ ];
···
};
systemd.services.dependency-track-postgresql-init = lib.mkIf cfg.database.createLocally {
+
after = [ "postgresql.target" ];
before = [ "dependency-track.service" ];
+
bindsTo = [ "postgresql.target" ];
path = [ config.services.postgresql.package ];
serviceConfig = {
Type = "oneshot";
···
if cfg.database.createLocally then
[
"dependency-track-postgresql-init.service"
+
"postgresql.target"
]
else
[ ];
+1 -1
nixos/modules/services/web-apps/dex.nix
···
wantedBy = [ "multi-user.target" ];
after = [
"networking.target"
-
] ++ (optional (cfg.settings.storage.type == "postgres") "postgresql.service");
path = with pkgs; [ replace-secret ];
restartTriggers = restartTriggers;
serviceConfig =
···
wantedBy = [ "multi-user.target" ];
after = [
"networking.target"
+
] ++ (optional (cfg.settings.storage.type == "postgres") "postgresql.target");
path = with pkgs; [ replace-secret ];
restartTriggers = restartTriggers;
serviceConfig =
+6 -6
nixos/modules/services/web-apps/discourse.nix
···
pgsql = config.services.postgresql;
in
lib.mkIf databaseActuallyCreateLocally {
-
after = [ "postgresql.service" ];
-
bindsTo = [ "postgresql.service" ];
wantedBy = [ "discourse.service" ];
partOf = [ "discourse.service" ];
path = [
···
wantedBy = [ "multi-user.target" ];
after = [
"redis-discourse.service"
-
"postgresql.service"
-
"discourse-postgresql.service"
];
bindsTo =
[
"redis-discourse.service"
]
++ lib.optionals (cfg.database.host == null) [
-
"postgresql.service"
-
"discourse-postgresql.service"
];
path = cfg.package.runtimeDeps ++ [
postgresqlPackage
···
pgsql = config.services.postgresql;
in
lib.mkIf databaseActuallyCreateLocally {
+
after = [ "postgresql.target" ];
+
bindsTo = [ "postgresql.target" ];
wantedBy = [ "discourse.service" ];
partOf = [ "discourse.service" ];
path = [
···
wantedBy = [ "multi-user.target" ];
after = [
"redis-discourse.service"
+
"postgresql.target"
+
"discourse-postgresql.target"
];
bindsTo =
[
"redis-discourse.service"
]
++ lib.optionals (cfg.database.host == null) [
+
"postgresql.target"
+
"discourse-postgresql.target"
];
path = cfg.package.runtimeDeps ++ [
postgresqlPackage
+2 -2
nixos/modules/services/web-apps/fider.nix
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
-
] ++ lib.optionals (cfg.database.url == "local") [ "postgresql.service" ];
-
requires = lib.optionals (cfg.database.url == "local") [ "postgresql.service" ];
environment =
let
localPostgresqlUrl = "postgres:///fider?host=/run/postgresql";
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
+
] ++ lib.optionals (cfg.database.url == "local") [ "postgresql.target" ];
+
requires = lib.optionals (cfg.database.url == "local") [ "postgresql.target" ];
environment =
let
localPostgresqlUrl = "postgres:///fider?host=/run/postgresql";
+1 -1
nixos/modules/services/web-apps/filesender.nix
···
"multi-user.target"
"phpfpm-filesender.service"
];
-
after = [ "postgresql.service" ];
restartIfChanged = true;
···
"multi-user.target"
"phpfpm-filesender.service"
];
+
after = [ "postgresql.target" ];
restartIfChanged = true;
+2 -2
nixos/modules/services/web-apps/firefly-iii.nix
···
systemd.services.firefly-iii-setup = {
after = [
-
"postgresql.service"
"mysql.service"
];
requiredBy = [ "phpfpm-firefly-iii.service" ];
···
systemd.services.firefly-iii-cron = {
after = [
"firefly-iii-setup.service"
-
"postgresql.service"
"mysql.service"
];
wants = [ "firefly-iii-setup.service" ];
···
systemd.services.firefly-iii-setup = {
after = [
+
"postgresql.target"
"mysql.service"
];
requiredBy = [ "phpfpm-firefly-iii.service" ];
···
systemd.services.firefly-iii-cron = {
after = [
"firefly-iii-setup.service"
+
"postgresql.target"
"mysql.service"
];
wants = [ "firefly-iii-setup.service" ];
+3 -3
nixos/modules/services/web-apps/froide-govplan.nix
···
systemd = {
services = {
-
postgresql.serviceConfig.ExecStartPost =
let
-
sqlFile = pkgs.writeText "immich-pgvectors-setup.sql" ''
CREATE EXTENSION IF NOT EXISTS postgis;
'';
in
···
Group = "govplan";
};
after = [
-
"postgresql.service"
"network.target"
"systemd-tmpfiles-setup.service"
];
···
systemd = {
services = {
+
postgresql-setup.serviceConfig.ExecStartPost =
let
+
sqlFile = pkgs.writeText "froide-govplan-postgis-setup.sql" ''
CREATE EXTENSION IF NOT EXISTS postgis;
'';
in
···
Group = "govplan";
};
after = [
+
"postgresql.target"
"network.target"
"systemd-tmpfiles-setup.service"
];
+1 -1
nixos/modules/services/web-apps/gancio.nix
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
-
] ++ optional (cfg.settings.db.dialect == "postgres") "postgresql.service";
environment = {
NODE_ENV = "production";
···
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
+
] ++ optional (cfg.settings.db.dialect == "postgres") "postgresql.target";
environment = {
NODE_ENV = "production";
+2 -2
nixos/modules/services/web-apps/glitchtip.nix
···
wants = [ "network-online.target" ];
requires =
-
lib.optional cfg.database.createLocally "postgresql.service"
++ lib.optional cfg.redis.createLocally "redis-glitchtip.service";
after =
[ "network-online.target" ]
-
++ lib.optional cfg.database.createLocally "postgresql.service"
++ lib.optional cfg.redis.createLocally "redis-glitchtip.service";
inherit environment;
···
wants = [ "network-online.target" ];
requires =
+
lib.optional cfg.database.createLocally "postgresql.target"
++ lib.optional cfg.redis.createLocally "redis-glitchtip.service";
after =
[ "network-online.target" ]
+
++ lib.optional cfg.database.createLocally "postgresql.target"
++ lib.optional cfg.redis.createLocally "redis-glitchtip.service";
inherit environment;
+2 -2
nixos/modules/services/web-apps/gotosocial.nix
···
systemd.services.gotosocial = {
description = "ActivityPub social network server";
wantedBy = [ "multi-user.target" ];
-
after = [ "network.target" ] ++ lib.optional cfg.setupPostgresqlDB "postgresql.service";
-
requires = lib.optional cfg.setupPostgresqlDB "postgresql.service";
restartTriggers = [ configFile ];
serviceConfig = {
···
systemd.services.gotosocial = {
description = "ActivityPub social network server";
wantedBy = [ "multi-user.target" ];
+
after = [ "network.target" ] ++ lib.optional cfg.setupPostgresqlDB "postgresql.target";
+
requires = lib.optional cfg.setupPostgresqlDB "postgresql.target";
restartTriggers = [ configFile ];
serviceConfig = {
+2 -2
nixos/modules/services/web-apps/homebox.nix
···
];
};
systemd.services.homebox = {
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
-
after = lib.optional cfg.database.createLocally "postgresql.service";
environment = cfg.settings;
serviceConfig = {
User = "homebox";
···
];
};
systemd.services.homebox = {
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
+
after = lib.optional cfg.database.createLocally "postgresql.target";
environment = cfg.settings;
serviceConfig = {
User = "homebox";
+1 -1
nixos/modules/services/web-apps/immich.nix
···
search_path = "\"$user\", public, vectors";
};
};
-
systemd.services.postgresql.serviceConfig.ExecStartPost =
let
sqlFile = pkgs.writeText "immich-pgvectors-setup.sql" ''
CREATE EXTENSION IF NOT EXISTS unaccent;
···
search_path = "\"$user\", public, vectors";
};
};
+
systemd.services.postgresql-setup.serviceConfig.ExecStartPost =
let
sqlFile = pkgs.writeText "immich-pgvectors-setup.sql" ''
CREATE EXTENSION IF NOT EXISTS unaccent;
+2 -2
nixos/modules/services/web-apps/invidious.nix
···
commonInvidousServiceConfig = {
description = "Invidious (An alternative YouTube front-end)";
wants = [ "network-online.target" ];
-
after = [ "network-online.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service";
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
···
commonInvidousServiceConfig = {
description = "Invidious (An alternative YouTube front-end)";
wants = [ "network-online.target" ];
+
after = [ "network-online.target" ] ++ lib.optional cfg.database.createLocally "postgresql.target";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
+3 -3
nixos/modules/services/web-apps/keycloak.nix
···
];
systemd.services.keycloakPostgreSQLInit = mkIf createLocalPostgreSQL {
-
after = [ "postgresql.service" ];
before = [ "keycloak.service" ];
-
bindsTo = [ "postgresql.service" ];
path = [ config.services.postgresql.package ];
serviceConfig = {
Type = "oneshot";
···
if createLocalPostgreSQL then
[
"keycloakPostgreSQLInit.service"
-
"postgresql.service"
]
else if createLocalMySQL then
[
···
];
systemd.services.keycloakPostgreSQLInit = mkIf createLocalPostgreSQL {
+
after = [ "postgresql.target" ];
before = [ "keycloak.service" ];
+
bindsTo = [ "postgresql.target" ];
path = [ config.services.postgresql.package ];
serviceConfig = {
Type = "oneshot";
···
if createLocalPostgreSQL then
[
"keycloakPostgreSQLInit.service"
+
"postgresql.target"
]
else if createLocalMySQL then
[
+4 -4
nixos/modules/services/web-apps/lasuite-docs.nix
···
description = "Docs from SuiteNumérique";
after =
[ "network.target" ]
-
++ (optional cfg.postgresql.createLocally "postgresql.service")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wants =
-
(optional cfg.postgresql.createLocally "postgresql.service")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wantedBy = [ "multi-user.target" ];
···
description = "Docs Celery broker from SuiteNumérique";
after =
[ "network.target" ]
-
++ (optional cfg.postgresql.createLocally "postgresql.service")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wants =
-
(optional cfg.postgresql.createLocally "postgresql.service")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wantedBy = [ "multi-user.target" ];
···
description = "Docs from SuiteNumérique";
after =
[ "network.target" ]
+
++ (optional cfg.postgresql.createLocally "postgresql.target")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wants =
+
(optional cfg.postgresql.createLocally "postgresql.target")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wantedBy = [ "multi-user.target" ];
···
description = "Docs Celery broker from SuiteNumérique";
after =
[ "network.target" ]
+
++ (optional cfg.postgresql.createLocally "postgresql.target")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wants =
+
(optional cfg.postgresql.createLocally "postgresql.target")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wantedBy = [ "multi-user.target" ];
+2 -2
nixos/modules/services/web-apps/lemmy.nix
···
wantedBy = [ "multi-user.target" ];
-
after = [ "pict-rs.service" ] ++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
-
requires = lib.optionals cfg.database.createLocally [ "postgresql.service" ];
# substitute secrets and prevent others from reading the result
# if somehow $CREDENTIALS_DIRECTORY is not set we fail
···
wantedBy = [ "multi-user.target" ];
+
after = [ "pict-rs.service" ] ++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
+
requires = lib.optionals cfg.database.createLocally [ "postgresql.target" ];
# substitute secrets and prevent others from reading the result
# if somehow $CREDENTIALS_DIRECTORY is not set we fail
+2 -2
nixos/modules/services/web-apps/limesurvey.nix
···
systemd.services.limesurvey-init = {
wantedBy = [ "multi-user.target" ];
before = [ "phpfpm-limesurvey.service" ];
-
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service";
environment.DBENGINE = "${cfg.database.dbEngine}";
environment.LIMESURVEY_CONFIG = limesurveyConfig;
script = ''
···
systemd.services.httpd.after =
optional mysqlLocal "mysql.service"
-
++ optional pgsqlLocal "postgresql.service";
users.users.${user} = {
group = group;
···
systemd.services.limesurvey-init = {
wantedBy = [ "multi-user.target" ];
before = [ "phpfpm-limesurvey.service" ];
+
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
environment.DBENGINE = "${cfg.database.dbEngine}";
environment.LIMESURVEY_CONFIG = limesurveyConfig;
script = ''
···
systemd.services.httpd.after =
optional mysqlLocal "mysql.service"
+
++ optional pgsqlLocal "postgresql.target";
users.users.${user} = {
group = group;
+11 -11
nixos/modules/services/web-apps/mastodon.nix
···
SystemCallArchitectures = "native";
};
-
# Services that all Mastodon units After= and Requires= on
-
commonServices =
lib.optional redisActuallyCreateLocally "redis-mastodon.service"
-
++ lib.optional databaseActuallyCreateLocally "postgresql.service"
++ lib.optional cfg.automaticMigrations "mastodon-init-db.service";
envFile = pkgs.writeText "mastodon.env" (
···
after = [
"network.target"
"mastodon-init-dirs.service"
-
] ++ commonServices;
-
requires = [ "mastodon-init-dirs.service" ] ++ commonServices;
description = "Mastodon sidekiq${jobClassLabel}";
wantedBy = [ "mastodon.target" ];
environment = env // {
···
after = [
"network.target"
"mastodon-init-dirs.service"
-
] ++ commonServices;
-
requires = [ "mastodon-init-dirs.service" ] ++ commonServices;
wantedBy = [
"mastodon.target"
"mastodon-streaming.target"
···
after = [
"network.target"
"mastodon-init-dirs.service"
-
] ++ lib.optional databaseActuallyCreateLocally "postgresql.service";
requires = [
"mastodon-init-dirs.service"
-
] ++ lib.optional databaseActuallyCreateLocally "postgresql.service";
};
systemd.services.mastodon-web = {
after = [
"network.target"
"mastodon-init-dirs.service"
-
] ++ commonServices;
-
requires = [ "mastodon-init-dirs.service" ] ++ commonServices;
wantedBy = [ "mastodon.target" ];
description = "Mastodon web";
environment =
···
SystemCallArchitectures = "native";
};
+
# Units that all Mastodon units After= and Requires= on
+
commonUnits =
lib.optional redisActuallyCreateLocally "redis-mastodon.service"
+
++ lib.optional databaseActuallyCreateLocally "postgresql.target"
++ lib.optional cfg.automaticMigrations "mastodon-init-db.service";
envFile = pkgs.writeText "mastodon.env" (
···
after = [
"network.target"
"mastodon-init-dirs.service"
+
] ++ commonUnits;
+
requires = [ "mastodon-init-dirs.service" ] ++ commonUnits;
description = "Mastodon sidekiq${jobClassLabel}";
wantedBy = [ "mastodon.target" ];
environment = env // {
···
after = [
"network.target"
"mastodon-init-dirs.service"
+
] ++ commonUnits;
+
requires = [ "mastodon-init-dirs.service" ] ++ commonUnits;
wantedBy = [
"mastodon.target"
"mastodon-streaming.target"
···
after = [
"network.target"
"mastodon-init-dirs.service"
+
] ++ lib.optional databaseActuallyCreateLocally "postgresql.target";
requires = [
"mastodon-init-dirs.service"
+
] ++ lib.optional databaseActuallyCreateLocally "postgresql.target";
};
systemd.services.mastodon-web = {
after = [
"network.target"
"mastodon-init-dirs.service"
+
] ++ commonUnits;
+
requires = [ "mastodon-init-dirs.service" ] ++ commonUnits;
wantedBy = [ "mastodon.target" ];
description = "Mastodon web";
environment =
+2 -2
nixos/modules/services/web-apps/mattermost.nix
···
wantedBy = [ "multi-user.target" ];
after = mkMerge [
[ "network.target" ]
-
(mkIf (cfg.database.driver == "postgres" && cfg.database.create) [ "postgresql.service" ])
(mkIf (cfg.database.driver == "mysql" && cfg.database.create) [ "mysql.service" ])
];
requires = after;
···
];
unitConfig.JoinsNamespaceOf = mkMerge [
-
(mkIf (cfg.database.driver == "postgres" && cfg.database.create) [ "postgresql.service" ])
(mkIf (cfg.database.driver == "mysql" && cfg.database.create) [ "mysql.service" ])
];
};
···
wantedBy = [ "multi-user.target" ];
after = mkMerge [
[ "network.target" ]
+
(mkIf (cfg.database.driver == "postgres" && cfg.database.create) [ "postgresql.target" ])
(mkIf (cfg.database.driver == "mysql" && cfg.database.create) [ "mysql.service" ])
];
requires = after;
···
];
unitConfig.JoinsNamespaceOf = mkMerge [
+
(mkIf (cfg.database.driver == "postgres" && cfg.database.create) [ "postgresql.target" ])
(mkIf (cfg.database.driver == "mysql" && cfg.database.create) [ "mysql.service" ])
];
};
+2 -2
nixos/modules/services/web-apps/mealie.nix
···
systemd.services.mealie = {
description = "Mealie, a self hosted recipe manager and meal planner";
-
after = [ "network-online.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service";
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
···
systemd.services.mealie = {
description = "Mealie, a self hosted recipe manager and meal planner";
+
after = [ "network-online.target" ] ++ lib.optional cfg.database.createLocally "postgresql.target";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
+2 -2
nixos/modules/services/web-apps/mediagoblin.nix
···
mediagoblin-paster = lib.recursiveUpdate serviceDefaults {
after = [
"mediagoblin-celeryd.service"
-
"postgresql.service"
];
requires = [
"mediagoblin-celeryd.service"
-
"postgresql.service"
];
preStart = ''
cp --remove-destination ${pasteConfig} /var/lib/mediagoblin/paste.ini
···
mediagoblin-paster = lib.recursiveUpdate serviceDefaults {
after = [
"mediagoblin-celeryd.service"
+
"postgresql.target"
];
requires = [
"mediagoblin-celeryd.service"
+
"postgresql.target"
];
preStart = ''
cp --remove-destination ${pasteConfig} /var/lib/mediagoblin/paste.ini
+2 -2
nixos/modules/services/web-apps/mediawiki.nix
···
before = [ "phpfpm-mediawiki.service" ];
after =
optional (cfg.database.type == "mysql" && cfg.database.createLocally) "mysql.service"
-
++ optional (cfg.database.type == "postgres" && cfg.database.createLocally) "postgresql.service";
script = ''
if ! test -e "${stateDir}/secret.key"; then
tr -dc A-Za-z0-9 </dev/urandom 2>/dev/null | head -c 64 > ${stateDir}/secret.key
···
) "mysql.service"
++ optional (
cfg.webserver == "apache" && cfg.database.createLocally && cfg.database.type == "postgres"
-
) "postgresql.service";
users.users.${user} = {
inherit group;
···
before = [ "phpfpm-mediawiki.service" ];
after =
optional (cfg.database.type == "mysql" && cfg.database.createLocally) "mysql.service"
+
++ optional (cfg.database.type == "postgres" && cfg.database.createLocally) "postgresql.target";
script = ''
if ! test -e "${stateDir}/secret.key"; then
tr -dc A-Za-z0-9 </dev/urandom 2>/dev/null | head -c 64 > ${stateDir}/secret.key
···
) "mysql.service"
++ optional (
cfg.webserver == "apache" && cfg.database.createLocally && cfg.database.type == "postgres"
+
) "postgresql.target";
users.users.${user} = {
inherit group;
+3 -3
nixos/modules/services/web-apps/miniflux.nix
···
systemd.services.miniflux-dbsetup = lib.mkIf cfg.createDatabaseLocally {
description = "Miniflux database setup";
-
requires = [ "postgresql.service" ];
after = [
"network.target"
-
"postgresql.service"
];
serviceConfig = {
Type = "oneshot";
···
after =
[ "network.target" ]
++ lib.optionals cfg.createDatabaseLocally [
-
"postgresql.service"
"miniflux-dbsetup.service"
];
···
systemd.services.miniflux-dbsetup = lib.mkIf cfg.createDatabaseLocally {
description = "Miniflux database setup";
+
requires = [ "postgresql.target" ];
after = [
"network.target"
+
"postgresql.target"
];
serviceConfig = {
Type = "oneshot";
···
after =
[ "network.target" ]
++ lib.optionals cfg.createDatabaseLocally [
+
"postgresql.target"
"miniflux-dbsetup.service"
];
+1 -1
nixos/modules/services/web-apps/misskey.nix
···
systemd.services.misskey = {
after = [
"network-online.target"
-
"postgresql.service"
];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
···
systemd.services.misskey = {
after = [
"network-online.target"
+
"postgresql.target"
];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
+1 -1
nixos/modules/services/web-apps/mobilizon.nix
···
systemd.services.mobilizon-postgresql = mkIf isLocalPostgres {
description = "Mobilizon PostgreSQL setup";
-
after = [ "postgresql.service" ];
before = [
"mobilizon.service"
"mobilizon-setup-secrets.service"
···
systemd.services.mobilizon-postgresql = mkIf isLocalPostgres {
description = "Mobilizon PostgreSQL setup";
+
after = [ "postgresql.target" ];
before = [
"mobilizon.service"
"mobilizon-setup-secrets.service"
+2 -2
nixos/modules/services/web-apps/moodle.nix
···
systemd.services.moodle-init = {
wantedBy = [ "multi-user.target" ];
before = [ "phpfpm-moodle.service" ];
-
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service";
environment.MOODLE_CONFIG = moodleConfig;
script = ''
${phpExt}/bin/php ${cfg.package}/share/moodle/admin/cli/check_database_schema.php && rc=$? || rc=$?
···
systemd.services.httpd.after =
optional mysqlLocal "mysql.service"
-
++ optional pgsqlLocal "postgresql.service";
users.users.${user} = {
group = group;
···
systemd.services.moodle-init = {
wantedBy = [ "multi-user.target" ];
before = [ "phpfpm-moodle.service" ];
+
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
environment.MOODLE_CONFIG = moodleConfig;
script = ''
${phpExt}/bin/php ${cfg.package}/share/moodle/admin/cli/check_database_schema.php && rc=$? || rc=$?
···
systemd.services.httpd.after =
optional mysqlLocal "mysql.service"
+
++ optional pgsqlLocal "postgresql.target";
users.users.${user} = {
group = group;
+8 -8
nixos/modules/services/web-apps/movim.nix
···
fpm = config.services.phpfpm.pools.${pool};
phpExecutionUnit = "phpfpm-${pool}";
-
dbService =
{
-
"postgresql" = "postgresql.service";
"mariadb" = "mysql.service";
}
.${cfg.database.type};
···
requiredBy = [ "${phpExecutionUnit}.service" ];
before = [ "${phpExecutionUnit}.service" ];
wants = [ "local-fs.target" ];
-
requires = lib.optional cfg.database.createLocally dbService;
-
after = lib.optional cfg.database.createLocally dbService;
serviceConfig =
{
···
requiredBy = [ "movim.service" ];
before = [ "movim.service" ] ++ lib.optional (webServerService != null) webServerService;
wants = [ "network.target" ];
-
requires = [ "movim-data-setup.service" ] ++ lib.optional cfg.database.createLocally dbService;
-
after = [ "movim-data-setup.service" ] ++ lib.optional cfg.database.createLocally dbService;
};
services.movim = {
···
"movim-data-setup.service"
"${phpExecutionUnit}.service"
]
-
++ lib.optional cfg.database.createLocally dbService
++ lib.optional (webServerService != null) webServerService;
after =
[
"movim-data-setup.service"
"${phpExecutionUnit}.service"
]
-
++ lib.optional cfg.database.createLocally dbService
++ lib.optional (webServerService != null) webServerService;
environment = {
PUBLIC_URL = "//${cfg.domain}";
···
fpm = config.services.phpfpm.pools.${pool};
phpExecutionUnit = "phpfpm-${pool}";
+
dbUnit =
{
+
"postgresql" = "postgresql.target";
"mariadb" = "mysql.service";
}
.${cfg.database.type};
···
requiredBy = [ "${phpExecutionUnit}.service" ];
before = [ "${phpExecutionUnit}.service" ];
wants = [ "local-fs.target" ];
+
requires = lib.optional cfg.database.createLocally dbUnit;
+
after = lib.optional cfg.database.createLocally dbUnit;
serviceConfig =
{
···
requiredBy = [ "movim.service" ];
before = [ "movim.service" ] ++ lib.optional (webServerService != null) webServerService;
wants = [ "network.target" ];
+
requires = [ "movim-data-setup.service" ] ++ lib.optional cfg.database.createLocally dbUnit;
+
after = [ "movim-data-setup.service" ] ++ lib.optional cfg.database.createLocally dbUnit;
};
services.movim = {
···
"movim-data-setup.service"
"${phpExecutionUnit}.service"
]
+
++ lib.optional cfg.database.createLocally dbUnit
++ lib.optional (webServerService != null) webServerService;
after =
[
"movim-data-setup.service"
"${phpExecutionUnit}.service"
]
+
++ lib.optional cfg.database.createLocally dbUnit
++ lib.optional (webServerService != null) webServerService;
environment = {
PUBLIC_URL = "//${cfg.domain}";
+2 -2
nixos/modules/services/web-apps/nextcloud.nix
···
wantedBy = [ "multi-user.target" ];
wants = [ "nextcloud-update-db.service" ];
before = [ "phpfpm-nextcloud.service" ];
-
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service";
-
requires = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service";
path = [ occ ];
restartTriggers = [ overrideConfig ];
script = ''
···
wantedBy = [ "multi-user.target" ];
wants = [ "nextcloud-update-db.service" ];
before = [ "phpfpm-nextcloud.service" ];
+
after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
+
requires = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
path = [ occ ];
restartTriggers = [ overrideConfig ];
script = ''
+2 -2
nixos/modules/services/web-apps/nipap.nix
···
after = [
"network.target"
"systemd-tmpfiles-setup.service"
-
] ++ lib.optional (cfg.settings.nipapd.db_host == "") "postgresql.service";
-
requires = lib.optional (cfg.settings.nipapd.db_host == "") "postgresql.service";
wantedBy = [ "multi-user.target" ];
preStart = lib.optionalString (cfg.settings.auth.default_backend == defaultAuthBackend) ''
# Create/upgrade local auth database
···
after = [
"network.target"
"systemd-tmpfiles-setup.service"
+
] ++ lib.optional (cfg.settings.nipapd.db_host == "") "postgresql.target";
+
requires = lib.optional (cfg.settings.nipapd.db_host == "") "postgresql.target";
wantedBy = [ "multi-user.target" ];
preStart = lib.optionalString (cfg.settings.auth.default_backend == defaultAuthBackend) ''
# Create/upgrade local auth database
+4 -4
nixos/modules/services/web-apps/onlyoffice.nix
···
after = [
"network.target"
"onlyoffice-docservice.service"
-
"postgresql.service"
];
requires = [
"network.target"
"onlyoffice-docservice.service"
-
"postgresql.service"
];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
···
description = "onlyoffice documentserver";
after = [
"network.target"
-
"postgresql.service"
];
-
requires = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${cfg.package.fhs}/bin/onlyoffice-wrapper DocService/docservice /run/onlyoffice/config";
···
after = [
"network.target"
"onlyoffice-docservice.service"
+
"postgresql.target"
];
requires = [
"network.target"
"onlyoffice-docservice.service"
+
"postgresql.target"
];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
···
description = "onlyoffice documentserver";
after = [
"network.target"
+
"postgresql.target"
];
+
requires = [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${cfg.package.fhs}/bin/onlyoffice-wrapper DocService/docservice /run/onlyoffice/config";
+2 -2
nixos/modules/services/web-apps/outline.nix
···
wantedBy = [ "multi-user.target" ];
after =
[ "networking.target" ]
-
++ lib.optional (cfg.databaseUrl == "local") "postgresql.service"
++ lib.optional (cfg.redisUrl == "local") "redis-outline.service";
requires =
-
lib.optional (cfg.databaseUrl == "local") "postgresql.service"
++ lib.optional (cfg.redisUrl == "local") "redis-outline.service";
path = [
pkgs.openssl # Required by the preStart script
···
wantedBy = [ "multi-user.target" ];
after =
[ "networking.target" ]
+
++ lib.optional (cfg.databaseUrl == "local") "postgresql.target"
++ lib.optional (cfg.redisUrl == "local") "redis-outline.service";
requires =
+
lib.optional (cfg.databaseUrl == "local") "postgresql.target"
++ lib.optional (cfg.redisUrl == "local") "redis-outline.service";
path = [
pkgs.openssl # Required by the preStart script
+3 -3
nixos/modules/services/web-apps/part-db.nix
···
services = {
part-db-migrate = {
before = [ "phpfpm-part-db.service" ];
-
after = [ "postgresql.service" ];
-
requires = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
···
after = [ "part-db-migrate.service" ];
requires = [
"part-db-migrate.service"
-
"postgresql.service"
];
# ensure nginx can access the php-fpm socket
postStart = ''
···
services = {
part-db-migrate = {
before = [ "phpfpm-part-db.service" ];
+
after = [ "postgresql.target" ];
+
requires = [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
···
after = [ "part-db-migrate.service" ];
requires = [
"part-db-migrate.service"
+
"postgresql.target"
];
# ensure nginx can access the php-fpm socket
postStart = ''
+4 -4
nixos/modules/services/web-apps/peertube.nix
···
description = "Initialization database for PeerTube daemon";
after = [
"network.target"
-
"postgresql.service"
];
-
requires = [ "postgresql.service" ];
script =
let
···
[ "network.target" ]
++ lib.optional cfg.redis.createLocally "redis-peertube.service"
++ lib.optionals cfg.database.createLocally [
-
"postgresql.service"
"peertube-init-db.service"
];
requires =
lib.optional cfg.redis.createLocally "redis-peertube.service"
++ lib.optionals cfg.database.createLocally [
-
"postgresql.service"
"peertube-init-db.service"
];
wantedBy = [ "multi-user.target" ];
···
description = "Initialization database for PeerTube daemon";
after = [
"network.target"
+
"postgresql.target"
];
+
requires = [ "postgresql.target" ];
script =
let
···
[ "network.target" ]
++ lib.optional cfg.redis.createLocally "redis-peertube.service"
++ lib.optionals cfg.database.createLocally [
+
"postgresql.target"
"peertube-init-db.service"
];
requires =
lib.optional cfg.redis.createLocally "redis-peertube.service"
++ lib.optionals cfg.database.createLocally [
+
"postgresql.target"
"peertube-init-db.service"
];
wantedBy = [ "multi-user.target" ];
+6 -6
nixos/modules/services/web-apps/pixelfed.nix
···
"mysql" = "/run/mysqld/mysqld.sock";
}
.${cfg.database.type};
-
dbService =
{
-
"pgsql" = "postgresql.service";
"mysql" = "mysql.service";
}
.${cfg.database.type};
···
"pixelfed-horizon.service"
"pixelfed-data-setup.service"
]
-
++ lib.optional cfg.database.createLocally dbService
++ lib.optional cfg.redis.createLocally redisService;
# Ensure image optimizations programs are available.
systemd.services.phpfpm-pixelfed.path = extraPrograms;
···
];
requires =
[ "pixelfed-data-setup.service" ]
-
++ (lib.optional cfg.database.createLocally dbService)
++ (lib.optional cfg.redis.createLocally redisService);
wantedBy = [ "multi-user.target" ];
# Ensure image optimizations programs are available.
···
systemd.services.pixelfed-data-setup = {
description = "Pixelfed setup: migrations, environment file update, cache reload, data changes";
wantedBy = [ "multi-user.target" ];
-
after = lib.optional cfg.database.createLocally dbService;
-
requires = lib.optional cfg.database.createLocally dbService;
path =
with pkgs;
[
···
"mysql" = "/run/mysqld/mysqld.sock";
}
.${cfg.database.type};
+
dbUnit =
{
+
"pgsql" = "postgresql.target";
"mysql" = "mysql.service";
}
.${cfg.database.type};
···
"pixelfed-horizon.service"
"pixelfed-data-setup.service"
]
+
++ lib.optional cfg.database.createLocally dbUnit
++ lib.optional cfg.redis.createLocally redisService;
# Ensure image optimizations programs are available.
systemd.services.phpfpm-pixelfed.path = extraPrograms;
···
];
requires =
[ "pixelfed-data-setup.service" ]
+
++ (lib.optional cfg.database.createLocally dbUnit)
++ (lib.optional cfg.redis.createLocally redisService);
wantedBy = [ "multi-user.target" ];
# Ensure image optimizations programs are available.
···
systemd.services.pixelfed-data-setup = {
description = "Pixelfed setup: migrations, environment file update, cache reload, data changes";
wantedBy = [ "multi-user.target" ];
+
after = lib.optional cfg.database.createLocally dbUnit;
+
requires = lib.optional cfg.database.createLocally dbUnit;
path =
with pkgs;
[
+3 -3
nixos/modules/services/web-apps/plausible.nix
···
after =
optional cfg.database.clickhouse.setup "clickhouse.service"
++ optionals cfg.database.postgres.setup [
-
"postgresql.service"
"plausible-postgres.service"
];
requires =
optional cfg.database.clickhouse.setup "clickhouse.service"
++ optionals cfg.database.postgres.setup [
-
"postgresql.service"
"plausible-postgres.service"
];
···
(mkIf cfg.database.postgres.setup {
# `plausible' requires the `citext'-extension.
plausible-postgres = {
-
after = [ "postgresql.service" ];
partOf = [ "plausible.service" ];
serviceConfig = {
Type = "oneshot";
···
after =
optional cfg.database.clickhouse.setup "clickhouse.service"
++ optionals cfg.database.postgres.setup [
+
"postgresql.target"
"plausible-postgres.service"
];
requires =
optional cfg.database.clickhouse.setup "clickhouse.service"
++ optionals cfg.database.postgres.setup [
+
"postgresql.target"
"plausible-postgres.service"
];
···
(mkIf cfg.database.postgres.setup {
# `plausible' requires the `citext'-extension.
plausible-postgres = {
+
after = [ "postgresql.target" ];
partOf = [ "plausible.service" ];
serviceConfig = {
Type = "oneshot";
+2 -2
nixos/modules/services/web-apps/pretalx.nix
···
"redis-pretalx.service"
]
++ lib.optionals (cfg.settings.database.backend == "postgresql") [
-
"postgresql.service"
]
++ lib.optionals (cfg.settings.database.backend == "mysql") [
"mysql.service"
···
"redis-pretalx.service"
]
++ lib.optionals (cfg.settings.database.backend == "postgresql") [
-
"postgresql.service"
]
++ lib.optionals (cfg.settings.database.backend == "mysql") [
"mysql.service"
···
"redis-pretalx.service"
]
++ lib.optionals (cfg.settings.database.backend == "postgresql") [
+
"postgresql.target"
]
++ lib.optionals (cfg.settings.database.backend == "mysql") [
"mysql.service"
···
"redis-pretalx.service"
]
++ lib.optionals (cfg.settings.database.backend == "postgresql") [
+
"postgresql.target"
]
++ lib.optionals (cfg.settings.database.backend == "mysql") [
"mysql.service"
+2 -2
nixos/modules/services/web-apps/pretix.nix
···
after = [
"network.target"
"redis-pretix.service"
-
"postgresql.service"
];
wantedBy = [ "multi-user.target" ];
preStart = ''
···
after = [
"network.target"
"redis-pretix.service"
-
"postgresql.service"
];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
···
after = [
"network.target"
"redis-pretix.service"
+
"postgresql.target"
];
wantedBy = [ "multi-user.target" ];
preStart = ''
···
after = [
"network.target"
"redis-pretix.service"
+
"postgresql.target"
];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
+1 -1
nixos/modules/services/web-apps/reposilite.nix
···
after =
[ "network.target" ]
++ (lib.optional useMySQL "mysql.service")
-
++ (lib.optional usePostgres "postgresql.service");
script =
lib.optionalString (cfg.keyPasswordFile != null && cfg.settings.keyPassword == null) ''
···
after =
[ "network.target" ]
++ (lib.optional useMySQL "mysql.service")
+
++ (lib.optional usePostgres "postgresql.target");
script =
lib.optionalString (cfg.keyPasswordFile != null && cfg.settings.keyPassword == null) ''
+1 -1
nixos/modules/services/web-apps/shiori.nix
···
description = "Shiori simple bookmarks manager";
wantedBy = [ "multi-user.target" ];
after = [
-
"postgresql.service"
"mysql.service"
];
environment =
···
description = "Shiori simple bookmarks manager";
wantedBy = [ "multi-user.target" ];
after = [
+
"postgresql.target"
"mysql.service"
];
environment =
+2 -2
nixos/modules/services/web-apps/sogo.nix
···
systemd.services.sogo = {
description = "SOGo groupware";
after = [
-
"postgresql.service"
"mysql.service"
"memcached.service"
"openldap.service"
···
description = "SOGo email alarms";
after = [
-
"postgresql.service"
"mysqld.service"
"memcached.service"
"openldap.service"
···
systemd.services.sogo = {
description = "SOGo groupware";
after = [
+
"postgresql.target"
"mysql.service"
"memcached.service"
"openldap.service"
···
description = "SOGo email alarms";
after = [
+
"postgresql.target"
"mysqld.service"
"memcached.service"
"openldap.service"
+2 -2
nixos/modules/services/web-apps/tt-rss.nix
···
};
wantedBy = [ "multi-user.target" ];
-
requires = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service";
after =
[ "network.target" ]
++ optional mysqlLocal "mysql.service"
-
++ optional pgsqlLocal "postgresql.service";
};
};
···
};
wantedBy = [ "multi-user.target" ];
+
requires = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
after =
[ "network.target" ]
++ optional mysqlLocal "mysql.service"
+
++ optional pgsqlLocal "postgresql.target";
};
};
+1 -1
nixos/modules/services/web-apps/vikunja.nix
···
description = "vikunja";
after =
[ "network.target" ]
-
++ lib.optional usePostgresql "postgresql.service"
++ lib.optional useMysql "mysql.service";
wantedBy = [ "multi-user.target" ];
path = [ cfg.package ];
···
description = "vikunja";
after =
[ "network.target" ]
+
++ lib.optional usePostgresql "postgresql.target"
++ lib.optional useMysql "mysql.service";
wantedBy = [ "multi-user.target" ];
path = [ cfg.package ];
+2 -2
nixos/modules/services/web-apps/wakapi.nix
···
description = "Wakapi (self-hosted WakaTime-compatible backend)";
wants = [
"network-online.target"
-
] ++ optional (cfg.database.dialect == "postgres") "postgresql.service";
after = [
"network-online.target"
-
] ++ optional (cfg.database.dialect == "postgres") "postgresql.service";
wantedBy = [ "multi-user.target" ];
script = ''
···
description = "Wakapi (self-hosted WakaTime-compatible backend)";
wants = [
"network-online.target"
+
] ++ optional (cfg.database.dialect == "postgres") "postgresql.target";
after = [
"network-online.target"
+
] ++ optional (cfg.database.dialect == "postgres") "postgresql.target";
wantedBy = [ "multi-user.target" ];
script = ''
+2 -2
nixos/modules/services/web-apps/weblate.nix
···
systemd.services.weblate-postgresql-setup = {
description = "Weblate PostgreSQL setup";
-
after = [ "postgresql.service" ];
serviceConfig = {
Type = "oneshot";
User = "postgres";
···
after = [
"network.target"
"redis-weblate.service"
-
"postgresql.service"
];
# We want this to be active on boot, not just on socket activation
wantedBy = [ "multi-user.target" ];
···
systemd.services.weblate-postgresql-setup = {
description = "Weblate PostgreSQL setup";
+
after = [ "postgresql.target" ];
serviceConfig = {
Type = "oneshot";
User = "postgres";
···
after = [
"network.target"
"redis-weblate.service"
+
"postgresql.target"
];
# We want this to be active on boot, not just on socket activation
wantedBy = [ "multi-user.target" ];
+30 -32
nixos/modules/services/web-apps/windmill.nix
···
# coming from https://github.com/windmill-labs/windmill/blob/main/init-db-as-superuser.sql
# modified to not grant privileges on all tables
# create role windmill_user and windmill_admin only if they don't exist
-
postgresql.postStart = lib.mkIf cfg.database.createLocally (
-
lib.mkAfter ''
-
$PSQL -tA <<"EOF"
-
DO $$
-
BEGIN
-
IF NOT EXISTS (
-
SELECT FROM pg_catalog.pg_roles
-
WHERE rolname = 'windmill_user'
-
) THEN
-
CREATE ROLE windmill_user;
-
GRANT ALL PRIVILEGES ON DATABASE ${cfg.database.name} TO windmill_user;
-
ELSE
-
RAISE NOTICE 'Role "windmill_user" already exists. Skipping.';
-
END IF;
-
IF NOT EXISTS (
-
SELECT FROM pg_catalog.pg_roles
-
WHERE rolname = 'windmill_admin'
-
) THEN
-
CREATE ROLE windmill_admin WITH BYPASSRLS;
-
GRANT windmill_user TO windmill_admin;
-
ELSE
-
RAISE NOTICE 'Role "windmill_admin" already exists. Skipping.';
-
END IF;
-
GRANT windmill_admin TO windmill;
-
END
-
$$;
-
EOF
-
''
-
);
windmill-server = {
description = "Windmill server";
-
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = serviceConfig // {
···
windmill-worker = {
description = "Windmill worker";
-
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = serviceConfig // {
···
windmill-worker-native = {
description = "Windmill worker native";
-
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = serviceConfig // {
···
# coming from https://github.com/windmill-labs/windmill/blob/main/init-db-as-superuser.sql
# modified to not grant privileges on all tables
# create role windmill_user and windmill_admin only if they don't exist
+
postgresql.postStart = lib.mkIf cfg.database.createLocally ''
+
psql -tA <<"EOF"
+
DO $$
+
BEGIN
+
IF NOT EXISTS (
+
SELECT FROM pg_catalog.pg_roles
+
WHERE rolname = 'windmill_user'
+
) THEN
+
CREATE ROLE windmill_user;
+
GRANT ALL PRIVILEGES ON DATABASE ${cfg.database.name} TO windmill_user;
+
ELSE
+
RAISE NOTICE 'Role "windmill_user" already exists. Skipping.';
+
END IF;
+
IF NOT EXISTS (
+
SELECT FROM pg_catalog.pg_roles
+
WHERE rolname = 'windmill_admin'
+
) THEN
+
CREATE ROLE windmill_admin WITH BYPASSRLS;
+
GRANT windmill_user TO windmill_admin;
+
ELSE
+
RAISE NOTICE 'Role "windmill_admin" already exists. Skipping.';
+
END IF;
+
GRANT windmill_admin TO windmill;
+
END
+
$$;
+
EOF
+
'';
windmill-server = {
description = "Windmill server";
+
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.target";
wantedBy = [ "multi-user.target" ];
serviceConfig = serviceConfig // {
···
windmill-worker = {
description = "Windmill worker";
+
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.target";
wantedBy = [ "multi-user.target" ];
serviceConfig = serviceConfig // {
···
windmill-worker-native = {
description = "Windmill worker native";
+
after = [ "network.target" ] ++ lib.optional cfg.database.createLocally "postgresql.target";
wantedBy = [ "multi-user.target" ];
serviceConfig = serviceConfig // {
+2 -2
nixos/modules/services/web-apps/zipline.nix
···
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
-
after = [ "network-online.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service";
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
environment = lib.mapAttrs (_: value: toString value) cfg.settings;
···
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
+
after = [ "network-online.target" ] ++ lib.optional cfg.database.createLocally "postgresql.target";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
environment = lib.mapAttrs (_: value: toString value) cfg.settings;
+1 -1
nixos/modules/services/web-servers/keter/default.nix
···
after = [
"network.target"
"local-fs.target"
-
"postgresql.service"
];
};
···
after = [
"network.target"
"local-fs.target"
+
"postgresql.target"
];
};
+1 -1
nixos/tests/coder.nix
···
testScript = ''
machine.start()
-
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("coder.service")
machine.wait_for_open_port(3000)
···
testScript = ''
machine.start()
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("coder.service")
machine.wait_for_open_port(3000)
+1 -1
nixos/tests/davis.nix
···
testScript = ''
start_all()
-
machine1.wait_for_unit("postgresql.service")
machine1.wait_for_unit("davis-env-setup.service")
machine1.wait_for_unit("davis-db-migrate.service")
machine1.wait_for_unit("phpfpm-davis.service")
···
testScript = ''
start_all()
+
machine1.wait_for_unit("postgresql.target")
machine1.wait_for_unit("davis-env-setup.service")
machine1.wait_for_unit("davis-db-migrate.service")
machine1.wait_for_unit("phpfpm-davis.service")
+2 -2
nixos/tests/documize.nix
···
};
systemd.services.documize-server = {
-
after = [ "postgresql.service" ];
-
requires = [ "postgresql.service" ];
};
services.postgresql = {
···
};
systemd.services.documize-server = {
+
after = [ "postgresql.target" ];
+
requires = [ "postgresql.target" ];
};
services.postgresql = {
+2 -2
nixos/tests/ferretdb.nix
···
};
systemd.services.ferretdb.serviceConfig = {
-
Requires = "postgresql.service";
-
After = "postgresql.service";
};
services.postgresql = {
···
};
systemd.services.ferretdb.serviceConfig = {
+
Requires = "postgresql.target";
+
After = "postgresql.target";
};
services.postgresql = {
+1 -1
nixos/tests/firefly-iii.nix
···
fireflySqlite.succeed("systemctl start firefly-iii-cron.service")
fireflyPostgresql.wait_for_unit("phpfpm-firefly-iii.service")
fireflyPostgresql.wait_for_unit("nginx.service")
-
fireflyPostgresql.wait_for_unit("postgresql.service")
fireflyPostgresql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
fireflyPostgresql.succeed("systemctl start firefly-iii-cron.service")
fireflyMysql.wait_for_unit("phpfpm-firefly-iii.service")
···
fireflySqlite.succeed("systemctl start firefly-iii-cron.service")
fireflyPostgresql.wait_for_unit("phpfpm-firefly-iii.service")
fireflyPostgresql.wait_for_unit("nginx.service")
+
fireflyPostgresql.wait_for_unit("postgresql.target")
fireflyPostgresql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
fireflyPostgresql.succeed("systemctl start firefly-iii-cron.service")
fireflyMysql.wait_for_unit("phpfpm-firefly-iii.service")
+2 -2
nixos/tests/freshrss/pgsql.nix
···
};
systemd.services."freshrss-config" = {
-
requires = [ "postgresql.service" ];
-
after = [ "postgresql.service" ];
};
};
···
};
systemd.services."freshrss-config" = {
+
requires = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
};
};
+1 -1
nixos/tests/gancio.nix
···
testScript = ''
start_all()
-
server.wait_for_unit("postgresql")
server.wait_for_unit("gancio")
server.wait_for_unit("nginx")
server.wait_for_file("/run/gancio/socket")
···
testScript = ''
start_all()
+
server.wait_for_unit("postgresql.target")
server.wait_for_unit("gancio")
server.wait_for_unit("nginx")
server.wait_for_file("/run/gancio/socket")
+1 -1
nixos/tests/gitlab.nix
···
gitlab.systemctl("start gitlab-backup.service")
gitlab.wait_for_unit("gitlab-backup.service")
gitlab.wait_for_file("${nodes.gitlab.services.gitlab.statePath}/backup/dump_gitlab_backup.tar")
-
gitlab.systemctl("stop postgresql.service gitlab-config.service gitlab.target")
gitlab.succeed(
"find ${nodes.gitlab.services.gitlab.statePath} -mindepth 1 -maxdepth 1 -not -name backup -execdir rm -r {} +"
)
···
gitlab.systemctl("start gitlab-backup.service")
gitlab.wait_for_unit("gitlab-backup.service")
gitlab.wait_for_file("${nodes.gitlab.services.gitlab.statePath}/backup/dump_gitlab_backup.tar")
+
gitlab.systemctl("stop postgresql gitlab-config.service gitlab.target")
gitlab.succeed(
"find ${nodes.gitlab.services.gitlab.statePath} -mindepth 1 -maxdepth 1 -not -name backup -execdir rm -r {} +"
)
+2 -2
nixos/tests/grafana/basic.nix
···
}
];
};
-
systemd.services.grafana.after = [ "postgresql.service" ];
};
mysql = {
···
with subtest("Successful API query as admin user with postgresql db"):
postgresql.wait_for_unit("grafana.service")
-
postgresql.wait_for_unit("postgresql.service")
postgresql.wait_for_open_port(3000)
postgresql.wait_for_open_port(5432)
postgresql.succeed(
···
}
];
};
+
systemd.services.grafana.after = [ "postgresql.target" ];
};
mysql = {
···
with subtest("Successful API query as admin user with postgresql db"):
postgresql.wait_for_unit("grafana.service")
+
postgresql.wait_for_unit("postgresql.target")
postgresql.wait_for_open_port(3000)
postgresql.wait_for_open_port(5432)
postgresql.succeed(
+4 -4
nixos/tests/hedgedoc.nix
···
hedgedocPostgresWithTCPSocket =
{ ... }:
{
-
systemd.services.hedgedoc.after = [ "postgresql.service" ];
services = {
hedgedoc = {
enable = true;
···
hedgedocPostgresWithUNIXSocket =
{ ... }:
{
-
systemd.services.hedgedoc.after = [ "postgresql.service" ];
services = {
hedgedoc = {
enable = true;
···
hedgedocSqlite.wait_until_succeeds("curl -sSf http://localhost:3000/new")
with subtest("HedgeDoc postgres with TCP socket"):
-
hedgedocPostgresWithTCPSocket.wait_for_unit("postgresql.service")
hedgedocPostgresWithTCPSocket.wait_for_unit("hedgedoc.service")
hedgedocPostgresWithTCPSocket.wait_for_open_port(5432)
hedgedocPostgresWithTCPSocket.wait_for_open_port(3000)
hedgedocPostgresWithTCPSocket.wait_until_succeeds("curl -sSf http://localhost:3000/new")
with subtest("HedgeDoc postgres with UNIX socket"):
-
hedgedocPostgresWithUNIXSocket.wait_for_unit("postgresql.service")
hedgedocPostgresWithUNIXSocket.wait_for_unit("hedgedoc.service")
hedgedocPostgresWithUNIXSocket.wait_for_open_port(5432)
hedgedocPostgresWithUNIXSocket.wait_for_open_port(3000)
···
hedgedocPostgresWithTCPSocket =
{ ... }:
{
+
systemd.services.hedgedoc.after = [ "postgresql.target" ];
services = {
hedgedoc = {
enable = true;
···
hedgedocPostgresWithUNIXSocket =
{ ... }:
{
+
systemd.services.hedgedoc.after = [ "postgresql.target" ];
services = {
hedgedoc = {
enable = true;
···
hedgedocSqlite.wait_until_succeeds("curl -sSf http://localhost:3000/new")
with subtest("HedgeDoc postgres with TCP socket"):
+
hedgedocPostgresWithTCPSocket.wait_for_unit("postgresql.target")
hedgedocPostgresWithTCPSocket.wait_for_unit("hedgedoc.service")
hedgedocPostgresWithTCPSocket.wait_for_open_port(5432)
hedgedocPostgresWithTCPSocket.wait_for_open_port(3000)
hedgedocPostgresWithTCPSocket.wait_until_succeeds("curl -sSf http://localhost:3000/new")
with subtest("HedgeDoc postgres with UNIX socket"):
+
hedgedocPostgresWithUNIXSocket.wait_for_unit("postgresql.target")
hedgedocPostgresWithUNIXSocket.wait_for_unit("hedgedoc.service")
hedgedocPostgresWithUNIXSocket.wait_for_open_port(5432)
hedgedocPostgresWithUNIXSocket.wait_for_open_port(3000)
+1 -1
nixos/tests/hydra/default.nix
···
# let the system boot up
machine.wait_for_unit("multi-user.target")
# test whether the database is running
-
machine.wait_for_unit("postgresql.service")
# test whether the actual hydra daemons are running
machine.wait_for_unit("hydra-init.service")
machine.require_unit_state("hydra-queue-runner.service")
···
# let the system boot up
machine.wait_for_unit("multi-user.target")
# test whether the database is running
+
machine.wait_for_unit("postgresql.target")
# test whether the actual hydra daemons are running
machine.wait_for_unit("hydra-init.service")
machine.require_unit_state("hydra-queue-runner.service")
+1 -1
nixos/tests/invidious.nix
···
curl_assert_status_code("http://invidious.example.com/search", 200)
machine.succeed("journalctl -eu invidious.service | grep -o \"SigHelper: Using helper at 'tcp://127.0.0.1:2999'\"")
-
postgres_tcp.wait_for_unit("postgresql.service")
activate_specialisation("postgres-tcp")
machine.wait_for_open_port(port)
curl_assert_status_code(f"{url}/search", 200)
···
curl_assert_status_code("http://invidious.example.com/search", 200)
machine.succeed("journalctl -eu invidious.service | grep -o \"SigHelper: Using helper at 'tcp://127.0.0.1:2999'\"")
+
postgres_tcp.wait_for_unit("postgresql.target")
activate_specialisation("postgres-tcp")
machine.wait_for_open_port(port)
curl_assert_status_code(f"{url}/search", 200)
+1 -1
nixos/tests/listmonk.nix
···
return f'curl -u "{basic_auth}" -X {type} "http://localhost:9000/api/{url}" -H "Content-Type: application/json; charset=utf-8" --data-raw \'{json_data}\'''
machine.wait_for_unit("mailhog.service")
-
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("listmonk.service")
machine.wait_for_open_port(1025)
machine.wait_for_open_port(8025)
···
return f'curl -u "{basic_auth}" -X {type} "http://localhost:9000/api/{url}" -H "Content-Type: application/json; charset=utf-8" --data-raw \'{json_data}\'''
machine.wait_for_unit("mailhog.service")
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("listmonk.service")
machine.wait_for_open_port(1025)
machine.wait_for_open_port(8025)
+1 -1
nixos/tests/matrix/synapse.nix
···
serverpostgres.wait_until_succeeds(
"journalctl -u matrix-synapse.service | grep -q 'Connected to redis'"
)
-
serverpostgres.require_unit_state("postgresql.service")
serverpostgres.succeed("REQUESTS_CA_BUNDLE=${ca_pem} register_new_matrix_user -u ${testUser} -p ${testPassword} -a -k ${registrationSharedSecret} https://localhost:8448/")
serverpostgres.succeed("obtain-token-and-register-email")
serversqlite.wait_for_unit("matrix-synapse.service")
···
serverpostgres.wait_until_succeeds(
"journalctl -u matrix-synapse.service | grep -q 'Connected to redis'"
)
+
serverpostgres.require_unit_state("postgresql.target")
serverpostgres.succeed("REQUESTS_CA_BUNDLE=${ca_pem} register_new_matrix_user -u ${testUser} -p ${testPassword} -a -k ${registrationSharedSecret} https://localhost:8448/")
serverpostgres.succeed("obtain-token-and-register-email")
serversqlite.wait_for_unit("matrix-synapse.service")
+2 -2
nixos/tests/miniflux.nix
···
host sameuser miniflux samenet scram-sha-256
'';
};
-
systemd.services.postgresql.postStart = lib.mkAfter ''
$PSQL -tAd miniflux -c 'CREATE EXTENSION hstore;'
'';
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
···
runTest(withoutSudo, ${toString defaultPort}, "${defaultUsername}:${defaultPassword}")
runTest(customized, ${toString port}, "${username}:${password}")
-
postgresTcp.wait_for_unit("postgresql.service")
externalDb.start()
runTest(externalDb, ${toString defaultPort}, "${defaultUsername}:${defaultPassword}")
'';
···
host sameuser miniflux samenet scram-sha-256
'';
};
+
systemd.services.postgresql-setup.postStart = lib.mkAfter ''
$PSQL -tAd miniflux -c 'CREATE EXTENSION hstore;'
'';
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
···
runTest(withoutSudo, ${toString defaultPort}, "${defaultUsername}:${defaultPassword}")
runTest(customized, ${toString port}, "${username}:${password}")
+
postgresTcp.wait_for_unit("postgresql.target")
externalDb.start()
runTest(externalDb, ${toString defaultPort}, "${defaultUsername}:${defaultPassword}")
'';
+3 -3
nixos/tests/nextcloud/with-declarative-redis-and-secrets.nix
···
};
systemd.services.nextcloud-setup = {
-
requires = [ "postgresql.service" ];
-
after = [ "postgresql.service" ];
};
services.postgresql = {
enable = true;
};
-
systemd.services.postgresql.postStart = lib.mkAfter ''
password=$(cat ${config.services.nextcloud.config.dbpassFile})
${config.services.postgresql.package}/bin/psql <<EOF
CREATE ROLE ${adminuser} WITH LOGIN PASSWORD '$password' CREATEDB;
···
};
systemd.services.nextcloud-setup = {
+
requires = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
};
services.postgresql = {
enable = true;
};
+
systemd.services.postgresql-setup.postStart = ''
password=$(cat ${config.services.nextcloud.config.dbpassFile})
${config.services.postgresql.package}/bin/psql <<EOF
CREATE ROLE ${adminuser} WITH LOGIN PASSWORD '$password' CREATEDB;
+2 -2
nixos/tests/pgadmin4.nix
···
testScript = ''
with subtest("Check pgadmin module"):
-
machine.wait_for_unit("postgresql")
machine.wait_for_unit("pgadmin")
machine.wait_until_succeeds("curl -sS localhost:5051")
machine.wait_until_succeeds("curl -sS localhost:5051/login | grep \"<title>pgAdmin 4</title>\" > /dev/null")
···
machine.succeed("wget -nv --level=1 --spider --recursive localhost:5050/browser")
with subtest("Check pgadmin minimum password length"):
-
machine2.wait_for_unit("postgresql")
machine2.wait_for_console_text("Password must be at least 12 characters long")
'';
}
···
testScript = ''
with subtest("Check pgadmin module"):
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("pgadmin")
machine.wait_until_succeeds("curl -sS localhost:5051")
machine.wait_until_succeeds("curl -sS localhost:5051/login | grep \"<title>pgAdmin 4</title>\" > /dev/null")
···
machine.succeed("wget -nv --level=1 --spider --recursive localhost:5050/browser")
with subtest("Check pgadmin minimum password length"):
+
machine2.wait_for_unit("postgresql.target")
machine2.wait_for_console_text("Password must be at least 12 characters long")
'';
}
+1 -1
nixos/tests/pgbackrest/sftp.nix
···
primary.succeed("sudo -u postgres pgbackrest --stanza=default restore --delta")
primary.systemctl("start postgresql")
-
primary.wait_for_unit("postgresql.service")
assert "hello world" in primary.succeed("sudo -u postgres psql -c 'TABLE t;'")
'';
}
···
primary.succeed("sudo -u postgres pgbackrest --stanza=default restore --delta")
primary.systemctl("start postgresql")
+
primary.wait_for_unit("postgresql.target")
assert "hello world" in primary.succeed("sudo -u postgres psql -c 'TABLE t;'")
'';
}
+1 -1
nixos/tests/pgbouncer.nix
···
one =
{ pkgs, ... }:
{
-
systemd.services.postgresql = {
postStart = ''
${pkgs.postgresql}/bin/psql -U postgres -c "ALTER ROLE testuser WITH LOGIN PASSWORD 'testpass'";
${pkgs.postgresql}/bin/psql -U postgres -c "ALTER DATABASE testdb OWNER TO testuser;";
···
one =
{ pkgs, ... }:
{
+
systemd.services.postgresql-setup = {
postStart = ''
${pkgs.postgresql}/bin/psql -U postgres -c "ALTER ROLE testuser WITH LOGIN PASSWORD 'testpass'";
${pkgs.postgresql}/bin/psql -U postgres -c "ALTER DATABASE testdb OWNER TO testuser;";
+1 -1
nixos/tests/pghero.nix
···
assert http_code.split("\n")[-1].strip() == code, \
f"expected HTTP status code {code} but got {http_code}"
-
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("pghero.service")
with subtest("requires HTTP Basic Auth credentials"):
···
assert http_code.split("\n")[-1].strip() == code, \
f"expected HTTP status code {code} but got {http_code}"
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("pghero.service")
with subtest("requires HTTP Basic Auth credentials"):
+1 -1
nixos/tests/pgweb.nix
···
ExecStart = "${pkgs.pgweb}/bin/pgweb --url postgresql://postgres@localhost:5432/postgres";
};
path = [ pkgs.getent ];
-
after = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
};
};
···
ExecStart = "${pkgs.pgweb}/bin/pgweb --url postgresql://postgres@localhost:5432/postgres";
};
path = [ pkgs.getent ];
+
after = [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
};
};
+1 -1
nixos/tests/pleroma.nix
···
testScript =
{ nodes, ... }:
''
-
pleroma.wait_for_unit("postgresql.service")
pleroma.wait_until_succeeds("ls /var/lib/pleroma")
pleroma.succeed("provision-db")
pleroma.wait_for_file("/var/lib/pleroma")
···
testScript =
{ nodes, ... }:
''
+
pleroma.wait_for_unit("postgresql.target")
pleroma.wait_until_succeeds("ls /var/lib/pleroma")
pleroma.succeed("provision-db")
pleroma.wait_for_file("/var/lib/pleroma")
+1 -1
nixos/tests/postfixadmin.nix
···
testScript = ''
postfixadmin.start
-
postfixadmin.wait_for_unit("postgresql.service")
postfixadmin.wait_for_unit("phpfpm-postfixadmin.service")
postfixadmin.wait_for_unit("nginx.service")
postfixadmin.succeed(
···
testScript = ''
postfixadmin.start
+
postfixadmin.wait_for_unit("postgresql.target")
postfixadmin.wait_for_unit("phpfpm-postfixadmin.service")
postfixadmin.wait_for_unit("nginx.service")
postfixadmin.succeed(
+1 -1
nixos/tests/postgres-websockets.nix
···
token = jwt.encode({ "mode": "rw" }, "reallyreallyreallyreallyverysafe")
def test():
-
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("postgres-websockets.service")
machine.succeed(f"echo 'hi there' | websocat --no-close 'ws://localhost:3000/test/{token}' > output &")
···
token = jwt.encode({ "mode": "rw" }, "reallyreallyreallyreallyverysafe")
def test():
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("postgres-websockets.service")
machine.succeed(f"echo 'hi there' | websocat --no-close 'ws://localhost:3000/test/{token}' > output &")
+1 -1
nixos/tests/postgresql/anonymizer.nix
···
testScript = ''
start_all()
machine.wait_for_unit("multi-user.target")
-
machine.wait_for_unit("postgresql.service")
with subtest("Setup"):
machine.succeed("sudo -u postgres psql --command 'create database demo'")
···
testScript = ''
start_all()
machine.wait_for_unit("multi-user.target")
+
machine.wait_for_unit("postgresql.target")
with subtest("Setup"):
machine.succeed("sudo -u postgres psql --command 'create database demo'")
+1 -1
nixos/tests/postgresql/pgjwt.nix
···
in
''
start_all()
-
master.wait_for_unit("postgresql")
master.succeed(
"${pkgs.sudo}/bin/sudo -u ${sqlSU} ${pgProve}/bin/pg_prove -d postgres -v -f ${pgjwt.src}/test.sql"
)
···
in
''
start_all()
+
master.wait_for_unit("postgresql.target")
master.succeed(
"${pkgs.sudo}/bin/sudo -u ${sqlSU} ${pgProve}/bin/pg_prove -d postgres -v -f ${pgjwt.src}/test.sql"
)
+1 -1
nixos/tests/postgresql/postgresql-jit.nix
···
testScript = ''
machine.start()
-
machine.wait_for_unit("postgresql.service")
with subtest("JIT is enabled"):
machine.succeed("sudo -u postgres psql <<<'show jit;' | grep 'on'")
···
testScript = ''
machine.start()
+
machine.wait_for_unit("postgresql.target")
with subtest("JIT is enabled"):
machine.succeed("sudo -u postgres psql <<<'show jit;' | grep 'on'")
+2 -2
nixos/tests/postgresql/postgresql-wal-receiver.nix
···
testScript = ''
# make an initial base backup
-
machine.wait_for_unit("postgresql")
machine.wait_for_unit("postgresql-wal-receiver-main")
# WAL receiver healthchecks PG every 5 seconds, so let's be sure they have connected each other
# required only for 9.4
···
machine.systemctl("start postgresql")
machine.wait_for_file("${postgresqlDataDir}/recovery.done")
machine.systemctl("restart postgresql")
-
machine.wait_for_unit("postgresql")
# check that our records have been restored
machine.succeed(
···
testScript = ''
# make an initial base backup
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("postgresql-wal-receiver-main")
# WAL receiver healthchecks PG every 5 seconds, so let's be sure they have connected each other
# required only for 9.4
···
machine.systemctl("start postgresql")
machine.wait_for_file("${postgresqlDataDir}/recovery.done")
machine.systemctl("restart postgresql")
+
machine.wait_for_unit("postgresql.target")
# check that our records have been restored
machine.succeed(
+3 -3
nixos/tests/postgresql/postgresql.nix
···
machine.start()
-
machine.wait_for_unit("postgresql")
with subtest("Postgresql is available just after unit start"):
machine.succeed(
···
import time
time.sleep(2)
machine.start()
-
machine.wait_for_unit("postgresql")
machine.fail(check_count("SELECT * FROM sth;", 3))
machine.succeed(check_count("SELECT * FROM sth;", 5))
···
''
import json
machine.start()
-
machine.wait_for_unit("postgresql")
with subtest("All user permissions are set according to the ensureClauses attr"):
clauses = json.loads(
···
machine.start()
+
machine.wait_for_unit("postgresql.target")
with subtest("Postgresql is available just after unit start"):
machine.succeed(
···
import time
time.sleep(2)
machine.start()
+
machine.wait_for_unit("postgresql.target")
machine.fail(check_count("SELECT * FROM sth;", 3))
machine.succeed(check_count("SELECT * FROM sth;", 5))
···
''
import json
machine.start()
+
machine.wait_for_unit("postgresql.target")
with subtest("All user permissions are set according to the ensureClauses attr"):
clauses = json.loads(
+1 -1
nixos/tests/postgresql/wal2json.nix
···
};
testScript = ''
-
machine.wait_for_unit("postgresql")
machine.succeed(
"sudo -u postgres psql -qAt -f ${./wal2json/example2.sql} postgres > /tmp/example2.out"
)
···
};
testScript = ''
+
machine.wait_for_unit("postgresql.target")
machine.succeed(
"sudo -u postgres psql -qAt -f ${./wal2json/example2.sql} postgres > /tmp/example2.out"
)
+1 -1
nixos/tests/postgrest.nix
···
''
import jwt
-
machine.wait_for_unit("postgresql.service")
def wait_for_postgrest():
machine.wait_for_unit("postgrest.service")
···
''
import jwt
+
machine.wait_for_unit("postgresql.target")
def wait_for_postgrest():
machine.wait_for_unit("postgrest.service")
+1 -1
nixos/tests/powerdns-admin.nix
···
'';
};
systemd.services.powerdns-admin = {
-
after = [ "postgresql.service" ];
serviceConfig.BindPaths = "/run/postgresql";
};
···
'';
};
systemd.services.powerdns-admin = {
+
after = [ "postgresql.target" ];
serviceConfig.BindPaths = "/run/postgresql";
};
+6 -6
nixos/tests/prometheus-exporters.nix
···
};
};
exporterTest = ''
-
wait_for_unit("postgresql.service")
wait_for_unit("pgbouncer.service")
wait_for_unit("prometheus-pgbouncer-exporter.service")
wait_for_open_port(9127)
···
exporterTest = ''
wait_for_unit("prometheus-postgres-exporter.service")
wait_for_open_port(9187)
-
wait_for_unit("postgresql.service")
succeed(
"curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'"
)
succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 1'")
-
systemctl("stop postgresql.service")
succeed(
"curl -sSf http://localhost:9187/metrics | grep -v 'pg_exporter_last_scrape_error 0'"
)
succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 0'")
-
systemctl("start postgresql.service")
-
wait_for_unit("postgresql.service")
succeed(
"curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'"
)
···
GRANT SELECT ON points TO "prometheus-sql-exporter";
'';
};
-
systemd.services.prometheus-sql-exporter.after = [ "postgresql.service" ];
};
exporterTest = ''
wait_for_unit("prometheus-sql-exporter.service")
···
};
};
exporterTest = ''
+
wait_for_unit("postgresql.target")
wait_for_unit("pgbouncer.service")
wait_for_unit("prometheus-pgbouncer-exporter.service")
wait_for_open_port(9127)
···
exporterTest = ''
wait_for_unit("prometheus-postgres-exporter.service")
wait_for_open_port(9187)
+
wait_for_unit("postgresql.target")
succeed(
"curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'"
)
succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 1'")
+
systemctl("stop postgresql")
succeed(
"curl -sSf http://localhost:9187/metrics | grep -v 'pg_exporter_last_scrape_error 0'"
)
succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 0'")
+
systemctl("start postgresql")
+
wait_for_unit("postgresql.target")
succeed(
"curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'"
)
···
GRANT SELECT ON points TO "prometheus-sql-exporter";
'';
};
+
systemd.services.prometheus-sql-exporter.after = [ "postgresql.target" ];
};
exporterTest = ''
wait_for_unit("prometheus-sql-exporter.service")
+1 -1
nixos/tests/roundcube.nix
···
testScript = ''
roundcube.start
-
roundcube.wait_for_unit("postgresql.service")
roundcube.wait_for_unit("phpfpm-roundcube.service")
roundcube.wait_for_unit("nginx.service")
roundcube.succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'")
···
testScript = ''
roundcube.start
+
roundcube.wait_for_unit("postgresql.target")
roundcube.wait_for_unit("phpfpm-roundcube.service")
roundcube.wait_for_unit("nginx.service")
roundcube.succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'")
+1 -1
nixos/tests/sftpgo.nix
···
};
systemd.services.sftpgo = {
-
after = [ "postgresql.service" ];
environment = {
# Update existing users
SFTPGO_LOADDATA_MODE = "0";
···
};
systemd.services.sftpgo = {
+
after = [ "postgresql.target" ];
environment = {
# Update existing users
SFTPGO_LOADDATA_MODE = "0";
+1 -1
nixos/tests/tandoor-recipes.nix
···
systemd.services = {
tandoor-recipes = {
-
after = [ "postgresql.service" ];
};
};
};
···
systemd.services = {
tandoor-recipes = {
+
after = [ "postgresql.target" ];
};
};
};
+1 -1
nixos/tests/vault-postgresql.nix
···
systemd.services.vault = {
after = [
-
"postgresql.service"
];
# Try for about 10 minutes rather than the default of 5 attempts.
serviceConfig.RestartSec = 1;
···
systemd.services.vault = {
after = [
+
"postgresql.target"
];
# Try for about 10 minutes rather than the default of 5 attempts.
serviceConfig.RestartSec = 1;
+1 -1
nixos/tests/vaultwarden.nix
···
services.vaultwarden.config.databaseUrl = "postgresql:///vaultwarden?host=/run/postgresql";
-
systemd.services.vaultwarden.after = [ "postgresql.service" ];
};
sqlite = {
···
services.vaultwarden.config.databaseUrl = "postgresql:///vaultwarden?host=/run/postgresql";
+
systemd.services.vaultwarden.after = [ "postgresql.target" ];
};
sqlite = {
+1 -1
nixos/tests/web-apps/gotosocial.nix
···
testScript = ''
machine.wait_for_unit("gotosocial.service")
-
machine.wait_for_unit("postgresql.service")
machine.wait_for_open_port(8081)
# Database migrations are running, wait until gotosocial no longer serves 503
machine.wait_until_succeeds("curl -sS -f http://localhost:8081/readyz", timeout=300)
···
testScript = ''
machine.wait_for_unit("gotosocial.service")
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_open_port(8081)
# Database migrations are running, wait until gotosocial no longer serves 503
machine.wait_until_succeeds("curl -sS -f http://localhost:8081/readyz", timeout=300)
+1 -1
nixos/tests/web-apps/mastodon/remote-databases.nix
···
nginx.wait_for_unit("nginx.service")
nginx.wait_for_open_port(443)
databases.wait_for_unit("redis-mastodon.service")
-
databases.wait_for_unit("postgresql.service")
databases.wait_for_open_port(31637)
databases.wait_for_open_port(5432)
'';
···
nginx.wait_for_unit("nginx.service")
nginx.wait_for_open_port(443)
databases.wait_for_unit("redis-mastodon.service")
+
databases.wait_for_unit("postgresql.target")
databases.wait_for_open_port(31637)
databases.wait_for_open_port(5432)
'';
+1 -1
nixos/tests/web-apps/mastodon/standard.nix
···
server.wait_for_unit("nginx.service")
server.wait_for_open_port(443)
server.wait_for_unit("redis-mastodon.service")
-
server.wait_for_unit("postgresql.service")
server.wait_for_open_port(5432)
'';
};
···
server.wait_for_unit("nginx.service")
server.wait_for_open_port(443)
server.wait_for_unit("redis-mastodon.service")
+
server.wait_for_unit("postgresql.target")
server.wait_for_open_port(5432)
'';
};
+1 -1
nixos/tests/web-apps/peertube.nix
···
testScript = ''
start_all()
-
database.wait_for_unit("postgresql.service")
database.wait_for_unit("redis-peertube.service")
database.wait_for_open_port(5432)
···
testScript = ''
start_all()
+
database.wait_for_unit("postgresql.target")
database.wait_for_unit("redis-peertube.service")
database.wait_for_open_port(5432)
+2 -2
nixos/tests/wiki-js.nix
···
];
};
systemd.services.wiki-js = {
-
requires = [ "postgresql.service" ];
-
after = [ "postgresql.service" ];
};
environment.systemPackages = with pkgs; [ jq ];
};
···
];
};
systemd.services.wiki-js = {
+
requires = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
};
environment.systemPackages = with pkgs; [ jq ];
};
+1 -1
nixos/tests/zammad.nix
···
testScript = ''
start_all()
-
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("redis-zammad.service")
machine.wait_for_unit("zammad-web.service")
machine.wait_for_unit("zammad-websocket.service")
···
testScript = ''
start_all()
+
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("redis-zammad.service")
machine.wait_for_unit("zammad-web.service")
machine.wait_for_unit("zammad-websocket.service")