Merge: nixos/postgresql: move postStart into separate unit (#403645)

Changed files
+414 -427
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"
+
"postgresql.target"
];
# note that if you are connecting to a postgres instance on a different host
-
# postgresql.service should not be included in the requires.
+
# postgresql.target should not be included in the requires.
requires = [
"network-online.target"
-
"postgresql.service"
+
"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-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-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": [
+
"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.postgresql` module now sets up a systemd unit `postgresql.target`. Depending on `postgresql.target` guarantees that postgres is in read-write mode and initial/ensure scripts were executed. Depending on `postgresql.service` only guarantees a read-only connection.
+
- The `services.siproxd` module has been removed as `siproxd` is unmaintained and broken with libosip 5.x.
- `netbox-manage` script created by the `netbox` module no longer uses `sudo -u netbox` internally. It can be run as root and will change it's user to `netbox` using `runuser`
+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" ];
+
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"
+
"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" ];
+
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";
+
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" ];
+
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"
+
"postgresql.target"
];
environment =
+16 -57
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's setup `postStart` {#module-services-postgres-initializing-extra-permissions-superuser-post-start}
-
##### 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.
+
`ensureUsers` is run in `postgresql-setup`, so this is where `postStart` must be added to:
```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"'
+
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}
+
#### in intermediate oneshot service {#module-services-postgres-initializing-extra-permissions-superuser-oneshot}
-
```nix
-
{
-
systemd.services."migrate-service1-db1" = {
-
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"'
-
# ....
-
'';
-
};
-
}
-
```
+
Make sure to run this service after `postgresql.target`, not `postgresql.service`.
-
#### 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"'
-
# ....
-
'';
-
}
-
```
+
They differ in two aspects:
+
- `postgresql.target` includes `postgresql-setup`, so users managed via `ensureUsers` are already created.
+
- `postgresql.target` will wait until PostgreSQL is in read-write mode after restoring from backup, while `postgresql.service` will already be ready when PostgreSQL is still recovering in read-only mode.
-
##### in intermediate oneshot service {#module-services-postgres-initializing-extra-permissions-service-user-oneshot}
+
Both can lead to unexpected errors either during initial database creation or restore, when using `postgresql.service`.
```nix
{
···
serviceConfig.Type = "oneshot";
requiredBy = "service1.service";
before = "service1.service";
-
after = "postgresql.service";
-
serviceConfig.User = "service1";
-
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
+
after = "postgresql.target";
+
serviceConfig.User = "postgres";
+
environment.PGPORT = 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"'
+
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"'
# ....
'';
};
+79 -48
nixos/modules/services/databases/postgresql.nix
···
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";
-
wantedBy = [ "multi-user.target" ];
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"
'';
-
-
# 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}";
};
+
+
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 =
+
''
+
check-connection() {
+
psql -d postgres -v ON_ERROR_STOP=1 <<-' EOF'
+
SELECT pg_is_in_recovery() \gset
+
\if :pg_is_in_recovery
+
\i still-recovering
+
\endif
+
EOF
+
}
+
while ! check-connection 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}
+
'';
+
};
};
meta.doc = ./postgresql.md;
-
meta.maintainers = with lib.maintainers; [
-
thoughtpolice
-
danbst
-
];
+
meta.maintainers = pkgs.postgresql.meta.maintainers;
}
+1 -1
nixos/modules/services/databases/postgrest.nix
···
wants = [ "network-online.target" ];
after = [
"network-online.target"
-
"postgresql.service"
+
"postgresql.target"
];
serviceConfig = {
+2 -2
nixos/modules/services/development/zammad.nix
···
"systemd-tmpfiles-setup.service"
]
++ lib.optionals (cfg.database.createLocally) [
-
"postgresql.service"
+
"postgresql.target"
]
++ lib.optionals cfg.redis.createLocally [
"redis-${cfg.redis.name}.service"
];
requires = lib.optionals (cfg.database.createLocally) [
-
"postgresql.service"
+
"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" ];
+
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"
+
"postgresql.target"
];
# pg_dump
path = [ config.services.postgresql.package ];
-
requires = [ "postgresql.service" ];
+
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" ];
+
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"
+
"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" ];
+
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";
+
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";
+
++ lib.optional withPostgresql "postgresql.target";
restartTriggers = [ mailmanCfgFile ];
-
requires = lib.optional withPostgresql "postgresql.service";
+
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.service";
-
requires = lib.optional withPostgresql "postgresql.service";
+
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.service";
+
after = lib.optional withPostgresql "postgresql.target";
requires = [
"mailman-uwsgi.socket"
"mailman-web-setup.service"
-
] ++ lib.optional withPostgresql "postgresql.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" ];
+
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" ];
+
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"
+
"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";
+
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"
+
"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";
+
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.service";
+
requires = optional hasLocalPostgresDB "postgresql.target";
else
wants = [ "network-online.target" ];
-
after = [ "network-online.target" ] ++ optional hasLocalPostgresDB "postgresql.service";
-
requires = optional hasLocalPostgresDB "postgresql.service";
+
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" ];
+
requires = lib.optionals cfg.database.createLocally [ "postgresql.target" ];
after = [
"network-online.target"
-
] ++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
+
] ++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
wants = [
"network-online.target"
-
] ++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
+
] ++ 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.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"
+
"postgresql.target"
]
++ optionals useMysql [
"mysql.service"
···
];
requires =
optionals (cfg.database.createDatabase && usePostgresql) [
-
"postgresql.service"
+
"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" ];
+
[ ] ++ 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 usePostgresql "postgresql.target"
++ optional useMysql "mysql.service";
requires =
-
optional (cfg.database.createDatabase && usePostgresql) "postgresql.service"
+
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" ];
+
after = [ "postgresql.target" ];
+
bindsTo = [ "postgresql.target" ];
wantedBy = [ "gitlab.target" ];
partOf = [ "gitlab.target" ];
path = [
···
systemd.services.gitlab-db-config = {
after = [
"gitlab-config.service"
-
"gitlab-postgresql.service"
-
"postgresql.service"
+
"gitlab-postgresql.target"
+
"postgresql.target"
];
wants =
-
optional (cfg.databaseHost == "") "postgresql.service"
-
++ optional databaseActuallyCreateLocally "gitlab-postgresql.service";
+
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.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.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.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";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after =
lib.optional enableRedis "redis-paperless.service"
-
++ lib.optional cfg.database.createLocally "postgresql.service";
+
++ lib.optional cfg.database.createLocally "postgresql.target";
};
systemd.services.paperless-task-queue = {
description = "Paperless Celery Workers";
-
requires = lib.optional cfg.database.createLocally "postgresql.service";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after = [
"paperless-scheduler.service"
-
] ++ lib.optional cfg.database.createLocally "postgresql.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.service";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after = [
"paperless-scheduler.service"
-
] ++ lib.optional cfg.database.createLocally "postgresql.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.service";
+
requires = lib.optional cfg.database.createLocally "postgresql.target";
after = [
"paperless-scheduler.service"
-
] ++ lib.optional cfg.database.createLocally "postgresql.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";
+
++ 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.postgresql.enable "postgresql.target"
++ optional cfg.redis.enable "redis-sourcehut-${srvsrht}.service";
requires =
-
optional cfg.postgresql.enable "postgresql.service"
+
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.postStart = (
-
lib.mkAfter ''
-
$PSQL -tAc 'ALTER DATABASE "${srvCfg.postgresql.database}" OWNER TO "${srvCfg.user}";'
-
''
-
);
+
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 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";
+
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";
+
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.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" ];
+
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" ];
+
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"
+
"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"
+
"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.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";
+
after = optional createLocalPostgresqlDb "postgresql.target";
serviceConfig = commonServiceConfig // {
Type = "oneshot";
ExecStart = "${getExe finalPackage} install";
···
after = [
"network.target"
"canaille-install.service"
-
] ++ optional createLocalPostgresqlDb "postgresql.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";
+
] ++ 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"
+
"postgresql.target"
];
before = [ "akkoma.service" ];
···
"akkoma-config.target"
"network.target"
"network-online.target"
-
"postgresql.service"
+
"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" ];
+
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"
+
++ lib.optional pgsqlLocal "postgresql.target"
++ [ "davis-env-setup.service" ];
requires =
lib.optional mysqlLocal "mysql.service"
-
++ lib.optional pgsqlLocal "postgresql.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.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" ];
+
after = [ "postgresql.target" ];
before = [ "dependency-track.service" ];
-
bindsTo = [ "postgresql.service" ];
+
bindsTo = [ "postgresql.target" ];
path = [ config.services.postgresql.package ];
serviceConfig = {
Type = "oneshot";
···
if cfg.database.createLocally then
[
"dependency-track-postgresql-init.service"
-
"postgresql.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");
+
] ++ (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" ];
+
after = [ "postgresql.target" ];
+
bindsTo = [ "postgresql.target" ];
wantedBy = [ "discourse.service" ];
partOf = [ "discourse.service" ];
path = [
···
wantedBy = [ "multi-user.target" ];
after = [
"redis-discourse.service"
-
"postgresql.service"
-
"discourse-postgresql.service"
+
"postgresql.target"
+
"discourse-postgresql.target"
];
bindsTo =
[
"redis-discourse.service"
]
++ lib.optionals (cfg.database.host == null) [
-
"postgresql.service"
-
"discourse-postgresql.service"
+
"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" ];
+
] ++ 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" ];
+
after = [ "postgresql.target" ];
restartIfChanged = true;
+2 -2
nixos/modules/services/web-apps/firefly-iii.nix
···
systemd.services.firefly-iii-setup = {
after = [
-
"postgresql.service"
+
"postgresql.target"
"mysql.service"
];
requiredBy = [ "phpfpm-firefly-iii.service" ];
···
systemd.services.firefly-iii-cron = {
after = [
"firefly-iii-setup.service"
-
"postgresql.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 =
+
postgresql-setup.serviceConfig.ExecStartPost =
let
-
sqlFile = pkgs.writeText "immich-pgvectors-setup.sql" ''
+
sqlFile = pkgs.writeText "froide-govplan-postgis-setup.sql" ''
CREATE EXTENSION IF NOT EXISTS postgis;
'';
in
···
Group = "govplan";
};
after = [
-
"postgresql.service"
+
"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";
+
] ++ 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.database.createLocally "postgresql.target"
++ lib.optional cfg.redis.createLocally "redis-glitchtip.service";
after =
[ "network-online.target" ]
-
++ lib.optional cfg.database.createLocally "postgresql.service"
+
++ 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";
+
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";
+
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 =
+
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";
+
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" ];
+
after = [ "postgresql.target" ];
before = [ "keycloak.service" ];
-
bindsTo = [ "postgresql.service" ];
+
bindsTo = [ "postgresql.target" ];
path = [ config.services.postgresql.package ];
serviceConfig = {
Type = "oneshot";
···
if createLocalPostgreSQL then
[
"keycloakPostgreSQLInit.service"
-
"postgresql.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.postgresql.createLocally "postgresql.target")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wants =
-
(optional cfg.postgresql.createLocally "postgresql.service")
+
(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.service")
+
++ (optional cfg.postgresql.createLocally "postgresql.target")
++ (optional cfg.redis.createLocally "redis-lasuite-docs.service");
wants =
-
(optional cfg.postgresql.createLocally "postgresql.service")
+
(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" ];
+
after = [ "pict-rs.service" ] ++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
-
requires = lib.optionals cfg.database.createLocally [ "postgresql.service" ];
+
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";
+
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.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 =
+
# Units that all Mastodon units After= and Requires= on
+
commonUnits =
lib.optional redisActuallyCreateLocally "redis-mastodon.service"
-
++ lib.optional databaseActuallyCreateLocally "postgresql.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"
-
] ++ commonServices;
-
requires = [ "mastodon-init-dirs.service" ] ++ commonServices;
+
] ++ commonUnits;
+
requires = [ "mastodon-init-dirs.service" ] ++ commonUnits;
description = "Mastodon sidekiq${jobClassLabel}";
wantedBy = [ "mastodon.target" ];
environment = env // {
···
after = [
"network.target"
"mastodon-init-dirs.service"
-
] ++ commonServices;
-
requires = [ "mastodon-init-dirs.service" ] ++ commonServices;
+
] ++ commonUnits;
+
requires = [ "mastodon-init-dirs.service" ] ++ commonUnits;
wantedBy = [
"mastodon.target"
"mastodon-streaming.target"
···
after = [
"network.target"
"mastodon-init-dirs.service"
-
] ++ lib.optional databaseActuallyCreateLocally "postgresql.service";
+
] ++ lib.optional databaseActuallyCreateLocally "postgresql.target";
requires = [
"mastodon-init-dirs.service"
-
] ++ lib.optional databaseActuallyCreateLocally "postgresql.service";
+
] ++ lib.optional databaseActuallyCreateLocally "postgresql.target";
};
systemd.services.mastodon-web = {
after = [
"network.target"
"mastodon-init-dirs.service"
-
] ++ commonServices;
-
requires = [ "mastodon-init-dirs.service" ] ++ commonServices;
+
] ++ 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 == "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.service" ])
+
(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";
+
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"
+
"postgresql.target"
];
requires = [
"mediagoblin-celeryd.service"
-
"postgresql.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";
+
++ 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.service";
+
) "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" ];
+
requires = [ "postgresql.target" ];
after = [
"network.target"
-
"postgresql.service"
+
"postgresql.target"
];
serviceConfig = {
Type = "oneshot";
···
after =
[ "network.target" ]
++ lib.optionals cfg.createDatabaseLocally [
-
"postgresql.service"
+
"postgresql.target"
"miniflux-dbsetup.service"
];
+1 -1
nixos/modules/services/web-apps/misskey.nix
···
systemd.services.misskey = {
after = [
"network-online.target"
-
"postgresql.service"
+
"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" ];
+
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";
+
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.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 =
+
dbUnit =
{
-
"postgresql" = "postgresql.service";
+
"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 dbService;
-
after = lib.optional cfg.database.createLocally dbService;
+
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 dbService;
-
after = [ "movim-data-setup.service" ] ++ lib.optional cfg.database.createLocally dbService;
+
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 dbService
+
++ lib.optional cfg.database.createLocally dbUnit
++ lib.optional (webServerService != null) webServerService;
after =
[
"movim-data-setup.service"
"${phpExecutionUnit}.service"
]
-
++ lib.optional cfg.database.createLocally dbService
+
++ 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";
+
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";
+
] ++ 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"
+
"postgresql.target"
];
requires = [
"network.target"
"onlyoffice-docservice.service"
-
"postgresql.service"
+
"postgresql.target"
];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
···
description = "onlyoffice documentserver";
after = [
"network.target"
-
"postgresql.service"
+
"postgresql.target"
];
-
requires = [ "postgresql.service" ];
+
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.databaseUrl == "local") "postgresql.target"
++ lib.optional (cfg.redisUrl == "local") "redis-outline.service";
requires =
-
lib.optional (cfg.databaseUrl == "local") "postgresql.service"
+
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" ];
+
after = [ "postgresql.target" ];
+
requires = [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
···
after = [ "part-db-migrate.service" ];
requires = [
"part-db-migrate.service"
-
"postgresql.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"
+
"postgresql.target"
];
-
requires = [ "postgresql.service" ];
+
requires = [ "postgresql.target" ];
script =
let
···
[ "network.target" ]
++ lib.optional cfg.redis.createLocally "redis-peertube.service"
++ lib.optionals cfg.database.createLocally [
-
"postgresql.service"
+
"postgresql.target"
"peertube-init-db.service"
];
requires =
lib.optional cfg.redis.createLocally "redis-peertube.service"
++ lib.optionals cfg.database.createLocally [
-
"postgresql.service"
+
"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 =
+
dbUnit =
{
-
"pgsql" = "postgresql.service";
+
"pgsql" = "postgresql.target";
"mysql" = "mysql.service";
}
.${cfg.database.type};
···
"pixelfed-horizon.service"
"pixelfed-data-setup.service"
]
-
++ lib.optional cfg.database.createLocally dbService
+
++ 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 dbService)
+
++ (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 dbService;
-
requires = lib.optional cfg.database.createLocally dbService;
+
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"
+
"postgresql.target"
"plausible-postgres.service"
];
requires =
optional cfg.database.clickhouse.setup "clickhouse.service"
++ optionals cfg.database.postgres.setup [
-
"postgresql.service"
+
"postgresql.target"
"plausible-postgres.service"
];
···
(mkIf cfg.database.postgres.setup {
# `plausible' requires the `citext'-extension.
plausible-postgres = {
-
after = [ "postgresql.service" ];
+
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"
+
"postgresql.target"
]
++ lib.optionals (cfg.settings.database.backend == "mysql") [
"mysql.service"
···
"redis-pretalx.service"
]
++ lib.optionals (cfg.settings.database.backend == "postgresql") [
-
"postgresql.service"
+
"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"
+
"postgresql.target"
];
wantedBy = [ "multi-user.target" ];
preStart = ''
···
after = [
"network.target"
"redis-pretix.service"
-
"postgresql.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");
+
++ (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"
+
"postgresql.target"
"mysql.service"
];
environment =
+2 -2
nixos/modules/services/web-apps/sogo.nix
···
systemd.services.sogo = {
description = "SOGo groupware";
after = [
-
"postgresql.service"
+
"postgresql.target"
"mysql.service"
"memcached.service"
"openldap.service"
···
description = "SOGo email alarms";
after = [
-
"postgresql.service"
+
"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";
+
requires = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
after =
[ "network.target" ]
++ optional mysqlLocal "mysql.service"
-
++ optional pgsqlLocal "postgresql.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 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";
+
] ++ optional (cfg.database.dialect == "postgres") "postgresql.target";
after = [
"network-online.target"
-
] ++ optional (cfg.database.dialect == "postgres") "postgresql.service";
+
] ++ 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" ];
+
after = [ "postgresql.target" ];
serviceConfig = {
Type = "oneshot";
User = "postgres";
···
after = [
"network.target"
"redis-weblate.service"
-
"postgresql.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
-
''
-
);
+
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.service";
+
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.service";
+
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.service";
+
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";
+
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"
+
"postgresql.target"
];
};
+1 -1
nixos/tests/coder.nix
···
testScript = ''
machine.start()
-
machine.wait_for_unit("postgresql.service")
+
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("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" ];
+
after = [ "postgresql.target" ];
+
requires = [ "postgresql.target" ];
};
services.postgresql = {
+2 -2
nixos/tests/ferretdb.nix
···
};
systemd.services.ferretdb.serviceConfig = {
-
Requires = "postgresql.service";
-
After = "postgresql.service";
+
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.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" ];
+
requires = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
};
};
+1 -1
nixos/tests/gancio.nix
···
testScript = ''
start_all()
-
server.wait_for_unit("postgresql")
+
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.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" ];
+
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.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" ];
+
systemd.services.hedgedoc.after = [ "postgresql.target" ];
services = {
hedgedoc = {
enable = true;
···
hedgedocPostgresWithUNIXSocket =
{ ... }:
{
-
systemd.services.hedgedoc.after = [ "postgresql.service" ];
+
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.service")
+
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.service")
+
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")
+
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")
+
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("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.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 ''
+
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.service")
+
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" ];
+
requires = [ "postgresql.target" ];
+
after = [ "postgresql.target" ];
};
services.postgresql = {
enable = true;
};
-
systemd.services.postgresql.postStart = lib.mkAfter ''
+
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("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")
+
machine2.wait_for_unit("postgresql.target")
machine2.wait_for_console_text("Password must be at least 12 characters long")
'';
}
+8 -1
nixos/tests/pgbackrest/posix.nix
···
CREATE TABLE t(c text);
INSERT INTO t VALUES ('hello world');
'';
+
# To make sure we're waiting for read-write after recovery.
+
ensureUsers = [
+
{
+
name = "app-user";
+
ensureClauses.login = true;
+
}
+
];
};
services.pgbackrest = {
···
primary.succeed("sudo -u postgres pgbackrest --stanza=default restore --delta")
primary.systemctl("start postgresql")
-
primary.wait_for_unit("postgresql.service")
+
primary.wait_for_unit("postgresql.target")
assert "hello world" in primary.succeed("sudo -u postgres psql -c 'TABLE t;'")
'';
}
+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")
+
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 = {
+
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("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" ];
+
after = [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
};
};
+1 -1
nixos/tests/pleroma.nix
···
testScript =
{ nodes, ... }:
''
-
pleroma.wait_for_unit("postgresql.service")
+
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("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("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")
+
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.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")
+
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.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")
+
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")
+
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")
+
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")
+
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.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")
+
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" ];
+
after = [ "postgresql.target" ];
serviceConfig.BindPaths = "/run/postgresql";
};
+6 -6
nixos/tests/prometheus-exporters.nix
···
};
};
exporterTest = ''
-
wait_for_unit("postgresql.service")
+
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.service")
+
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.service")
+
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.service")
-
wait_for_unit("postgresql.service")
+
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.service" ];
+
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("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" ];
+
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" ];
+
after = [ "postgresql.target" ];
};
};
};
+1 -1
nixos/tests/vault-postgresql.nix
···
systemd.services.vault = {
after = [
-
"postgresql.service"
+
"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" ];
+
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_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_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_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("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" ];
+
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("postgresql.target")
machine.wait_for_unit("redis-zammad.service")
machine.wait_for_unit("zammad-web.service")
machine.wait_for_unit("zammad-websocket.service")