traccar: fix jdbc url escaping for envsubst and xml
Some checks failed
Build and Deploy / deploy (push) Failing after 1m6s

This commit is contained in:
2026-04-12 20:47:08 -04:00
parent c497986ed0
commit f2ca84ab53

View File

@@ -1,4 +1,5 @@
{ {
pkgs,
service_configs, service_configs,
lib, lib,
... ...
@@ -38,13 +39,23 @@
services.traccar = { services.traccar = {
enable = true; enable = true;
# The JDBC URL contains '$' (Java inner class) and '&' (query param
# separator) which break the NixOS module's XML generator + envsubst.
# Route it through environmentFile so envsubst replaces $TRACCAR_DB_URL
# with the literal value, and use & for valid XML (the XML parser
# decodes it back to & for JDBC).
environmentFile = pkgs.writeText "traccar-db-env" ''
TRACCAR_DB_URL=jdbc:postgresql:///traccar?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=${service_configs.postgres.socket}/.s.PGSQL.5432
'';
settings = { settings = {
web.port = toString service_configs.ports.private.traccar_web.port; web.port = toString service_configs.ports.private.traccar_web.port;
# PostgreSQL via Unix socket (peer auth, junixsocket is bundled) # PostgreSQL via Unix socket (peer auth, junixsocket is bundled)
database = { database = {
driver = "org.postgresql.Driver"; driver = "org.postgresql.Driver";
url = "jdbc:postgresql:///traccar?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=${service_configs.postgres.socket}/.s.PGSQL.5432"; url = "$TRACCAR_DB_URL";
user = "traccar"; user = "traccar";
password = ""; password = "";
}; };