This repository has been archived on 2026-04-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
server-config/services/traccar.nix
Simon Gardling 39a178d59b
Some checks failed
Build and Deploy / deploy (push) Failing after 59s
traccar: use postgresql via unix socket
2026-04-12 16:26:46 -04:00

75 lines
2.0 KiB
Nix

{
service_configs,
lib,
...
}:
{
imports = [
(lib.serviceMountWithZpool "traccar" service_configs.zpool_ssds [
"/var/lib/traccar"
])
(lib.serviceFilePerms "traccar" [
"Z /var/lib/traccar 0700 traccar traccar"
])
(lib.mkCaddyReverseProxy {
subdomain = "traccar";
port = service_configs.ports.private.traccar_web.port;
})
];
users.users.traccar = {
isSystemUser = true;
group = "traccar";
home = "/var/lib/traccar";
description = "Traccar GPS Tracking";
};
users.groups.traccar = { };
# PostgreSQL database (auto-created, peer auth via Unix socket)
services.postgresql = {
ensureDatabases = [ "traccar" ];
ensureUsers = [
{
name = "traccar";
ensureDBOwnership = true;
}
];
};
services.traccar = {
enable = true;
settings = {
web.port = toString service_configs.ports.private.traccar_web.port;
# PostgreSQL via Unix socket (peer auth, junixsocket is bundled)
database = {
driver = "org.postgresql.Driver";
url = "jdbc:postgresql:///traccar?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=${service_configs.postgres.socket}/.s.PGSQL.5432";
user = "traccar";
password = "";
};
# Only enable OsmAnd protocol (phone app). Prevents Traccar from
# opening 200+ default protocol ports that conflict with other services.
protocols.enable = "osmand";
osmand.port = toString service_configs.ports.public.traccar_tracking.port;
};
};
# Disable DynamicUser so we can use peer auth with PostgreSQL
systemd.services.traccar = {
after = [ "postgresql.service" ];
requires = [ "postgresql.service" ];
serviceConfig = {
DynamicUser = lib.mkForce false;
User = "traccar";
Group = "traccar";
};
};
# OsmAnd tracking port must be reachable from the internet for the phone app
networking.firewall.allowedTCPPorts = [
service_configs.ports.public.traccar_tracking.port
];
}