summary refs log tree commit diff
diff options
context:
space:
mode:
authorMel <mel@rnrd.eu>2025-08-22 02:22:10 +0200
committerMel <mel@rnrd.eu>2025-08-22 02:22:10 +0200
commit8a296d3aedd41558feb00626aa743b0fea774ef2 (patch)
tree3df1098e1e80aaaf030a42126185b740e849f047
parent189457fe74c8cb416aaec072c3578664b3635f30 (diff)
downloadnetwork-8a296d3aedd41558feb00626aa743b0fea774ef2.tar.zst
network-8a296d3aedd41558feb00626aa743b0fea774ef2.zip
Add goatcounter analytics service
Signed-off-by: Mel <mel@rnrd.eu>
-rw-r--r--machines/renard/default.nix2
-rw-r--r--services/goatcounter.nix63
2 files changed, 65 insertions, 0 deletions
diff --git a/machines/renard/default.nix b/machines/renard/default.nix
index c3fb0fe..d9871c3 100644
--- a/machines/renard/default.nix
+++ b/machines/renard/default.nix
@@ -16,6 +16,7 @@
     ../../services/miniflux.nix
     ../../services/shiori.nix
     ../../services/matrix.nix
+    ../../services/goatcounter.nix
     ../../services/irc
   ];
 
@@ -44,6 +45,7 @@
         "mel"
         "shorest"
         "matrix"
+        "goat"
       ];
     };
   };
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;
+    '';
+  };
+}