summaryrefslogtreecommitdiff
path: root/services
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 /services
parent189457fe74c8cb416aaec072c3578664b3635f30 (diff)
downloadnetwork-8a296d3aedd41558feb00626aa743b0fea774ef2.tar.zst
network-8a296d3aedd41558feb00626aa743b0fea774ef2.zip
Add goatcounter analytics service
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'services')
-rw-r--r--services/goatcounter.nix63
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;
+ '';
+ };
+}