diff options
| author | Mel <mel@rnrd.eu> | 2025-08-22 02:22:10 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2025-08-22 02:22:10 +0200 |
| commit | 8a296d3aedd41558feb00626aa743b0fea774ef2 (patch) | |
| tree | 3df1098e1e80aaaf030a42126185b740e849f047 /services/goatcounter.nix | |
| parent | 189457fe74c8cb416aaec072c3578664b3635f30 (diff) | |
| download | network-8a296d3aedd41558feb00626aa743b0fea774ef2.tar.zst network-8a296d3aedd41558feb00626aa743b0fea774ef2.zip | |
Add goatcounter analytics service
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'services/goatcounter.nix')
| -rw-r--r-- | services/goatcounter.nix | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/services/goatcounter.nix b/services/goatcounter.nix new file mode 100644 index 0000000..b463b27 --- /dev/null +++ b/services/goatcounter.nix @@ -0,0 +1,63 @@ +{ + me, + pkgs, + auxiliaryPkgs, + ... +}: + +let + inherit (pkgs) dockerTools; + inherit (auxiliaryPkgs) common; + + goatcounter = pkgs.goatcounter; + + goatcounterLocalPort = 7151; + goatcounterDir = "/srv/goatcounter"; + + goatcounterImage = dockerTools.streamLayeredImage { + name = "goatcounter"; + tag = goatcounter.version; + fromImage = common.alpine.base; + contents = [ goatcounter ]; + }; + +in +{ + foundation.services.goatcounter = { + image = goatcounterImage; + ports = [ + [ + goatcounterLocalPort + 8080 + ] + ]; + + volumes = [ + [ + "${goatcounterDir}" + "/goatcounter" + ] + ]; + + entrypoint = "${goatcounter}/bin/goatcounter"; + cmd = [ + "serve" + "-automigrate" + "-listen=:8080" + "-tls=none" + "-db=sqlite+/goatcounter/db.sqlite3" + ]; + }; + + services.nginx.virtualHosts."goat.rnrd.eu" = { + useACMEHost = "rnrd.eu"; + forceSSL = true; + locations."/" = { + proxyPass = "http://127.0.0.1:${toString goatcounterLocalPort}/"; + proxyWebsockets = true; + }; + extraConfig = '' + access_log /var/log/nginx/goat.access.log json_combined; + ''; + }; +} |
