diff --git a/config/services/librespeed.nix b/config/services/librespeed.nix index 8ace17d..a09cbd0 100644 --- a/config/services/librespeed.nix +++ b/config/services/librespeed.nix @@ -1,6 +1,7 @@ -{ ... }: { +{ pkgs, ... }: { services.librespeed = { enable = true; + package = pkgs.librespeed-go; domain = "speed.kyouma.net"; }; } diff --git a/config/services/nginx.nix b/config/services/nginx.nix index 6f8e773..1a11e0a 100644 --- a/config/services/nginx.nix +++ b/config/services/nginx.nix @@ -34,5 +34,11 @@ add_header Referrer-Policy "same-origin" always; #add_header Content-Security-Policy "script-src 'self'; object-src 'none'; base-uri 'none';" always; ''; + eventsConfig = '' + multi_accept on; + ''; + appendConfig = '' + worker_processes auto; + ''; }; } diff --git a/flake.lock b/flake.lock index bb47470..6e7700a 100644 --- a/flake.lock +++ b/flake.lock @@ -743,11 +743,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1727040444, - "narHash": "sha256-19FNN5QT9Z11ZUMfftRplyNN+2PgcHKb3oq8KMW/hDA=", + "lastModified": 1727437159, + "narHash": "sha256-v4qLwEw5OmprgQZTT7KZMNU7JjXJzRypw8+Cw6++fWk=", "owner": "nixos", "repo": "nixos-hardware", - "rev": "d0cb432a9d28218df11cbd77d984a2a46caeb5ac", + "rev": "d830ad47cc992b4a46b342bbc79694cbd0e980b2", "type": "github" }, "original": { @@ -874,11 +874,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1727122398, - "narHash": "sha256-o8VBeCWHBxGd4kVMceIayf5GApqTavJbTa44Xcg5Rrk=", + "lastModified": 1727348695, + "narHash": "sha256-J+PeFKSDV+pHL7ukkfpVzCOO7mBSrrpJ3svwBFABbhI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", + "rev": "1925c603f17fc89f4c8f6bf6f631a802ad85d784", "type": "github" }, "original": { @@ -905,11 +905,11 @@ "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1727402188, - "narHash": "sha256-AxZVGgsWBDbhO1JVrYoHWG2IW5Se8JjJhC93Yfst4AM=", + "lastModified": 1727471696, + "narHash": "sha256-3r/VNQp5aJK9Gj8hKdfSYqeXcc0kqpfFYhEg8ioWttE=", "owner": "nix-community", "repo": "nixvim", - "rev": "cb2b76c1a9ec067ed0c449080f4973fecf8532ef", + "rev": "b5c19b6abb0fb0156b1cb76793b363e430e2cb47", "type": "github" }, "original": { @@ -985,11 +985,11 @@ "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1726524647, - "narHash": "sha256-qis6BtOOBBEAfUl7FMHqqTwRLB61OL5OFzIsOmRz2J4=", + "lastModified": 1727423009, + "narHash": "sha256-+4B/dQm2EnORIk0k2wV3aHGaE0WXTBjColXjj7qWh10=", "owner": "Mic92", "repo": "sops-nix", - "rev": "e2d404a7ea599a013189aa42947f66cede0645c8", + "rev": "127a96f49ddc377be6ba76964411bab11ae27803", "type": "github" }, "original": { diff --git a/modules/librespeed/default.nix b/modules/librespeed/default.nix index 68504f5..f5ad429 100644 --- a/modules/librespeed/default.nix +++ b/modules/librespeed/default.nix @@ -130,11 +130,19 @@ in { services.nginx.virtualHosts = lib.mkIf cfg.configureNginx { ${cfg.domain} = { locations."/" = { - proxyPass = "http://${cfg.settings.bind_address}:${toString cfg.settings.listen_port}"; + proxyPass = "http://[::1]:${toString cfg.settings.listen_port}"; recommendedProxySettings = true; + extraConfig = '' + proxy_cache off; + proxy_buffering off; + proxy_request_buffering off; + ''; }; enableACME = true; forceSSL = true; + extraConfig = '' + gzip off; + ''; }; }; security.acme.certs = lib.mkIf cfg.configureNginx { @@ -144,7 +152,7 @@ in { services.librespeed.servers = lib.mkIf (cfg.domain != null) [ { name = cfg.domain; - server = "https://${cfg.domain}"; + server = "//${cfg.domain}${lib.optionalString (!cfg.configureNginx) ":${toString cfg.settings.listen_port}"}"; } ]; services.librespeed.settings = let @@ -168,23 +176,28 @@ in { --replace-fail "TO BE FILLED BY DEVELOPER" ${lib.escapeShellArg (lib.escapeXML cfg.contactEmail)} ''; in { - speed_test_dir = assets; - bind_address = mkDefault (if cfg.configureNginx then "127.0.0.1" else "0.0.0.0"); + #speed_test_dir = assets; + assets_path = assets; + bind_address = mkDefault (if cfg.configureNginx then "::1" else "::"); listen_port = mkDefault 8989; - base_url = mkDefault "backend"; - worker_threads = mkDefault "auto"; + #base_url = mkDefault "backend"; + #worker_threads = mkDefault "auto"; + server_lat = 0; + server_lng = 0; + proxyprotocol_port = 0; + redact_ip_addresses = false; #librespeed-rust will fail to start if the following config parameters are omitted. ipinfo_api_key = mkIf (!cfg.secrets ? "ipinfo_api_key") ""; stats_password = mkIf (!cfg.secrets ? "stats_password") ""; - tls_key_file = mkDefault ""; - tls_cet_file = mkDefault ""; + #tls_key_file = mkDefault ""; + #tls_cet_file = mkDefault ""; enable_tls = mkDefault false; } // rec { database_type = mkDefault "none"; - database_file = mkIf (database_type == "sqlite") "/var/lib/librespeed/speedtest.sqlite"; + database_file = mkIf (database_type == "sqlite") (mkDefault "/var/lib/librespeed/speedtest.sqlite"); }; systemd.services = let @@ -242,7 +255,7 @@ in { DynamicUser = true; - ExecStartPre = lib.mkIf (!cfg.secrets ? "ipinfo_api_key") "${lib.getExe cfg.package} --update-ipdb"; + #ExecStartPre = lib.mkIf (!cfg.secrets ? "ipinfo_api_key") "${lib.getExe cfg.package} --update-ipdb"; ExecStart = "${lib.getExe cfg.package} -c ${if (cfg.secrets == {}) then configFile else "\${RUNTIME_DIRECTORY%%:*}/config.toml"}"; WorkingDirectory = "/var/cache/librespeed"; RuntimeDirectory = "librespeed"; diff --git a/pkgs/librespeed-go/default.nix b/pkgs/librespeed-go/default.nix new file mode 100644 index 0000000..8b096bb --- /dev/null +++ b/pkgs/librespeed-go/default.nix @@ -0,0 +1,34 @@ +{ + lib, + fetchFromGitHub, + buildGoModule, +}: +let + version = "1.1.5"; + src = fetchFromGitHub { + owner = "librespeed"; + repo = "speedtest-go"; + rev = "refs/tags/v${version}"; + hash = "sha256-ywGrodl/mj/WB25F0TKVvaV0PV4lgc+KEj0x/ix9HT8="; + }; +in +buildGoModule { + pname = "librespeed-go"; + inherit version src; + + vendorHash = "sha256-ev5TEv8u+tx7xIvNaK8b5iq2XXF6I37Fnrr8mb+N2WM="; + + ldflags = [ "-w" "-s" ]; + + postInstall = '' + cp -r web/assets $out/ + ''; + + meta = { + description = "A very lightweight speed test implementation in Go."; + homepage = "https://github.com/librespeed/speedtest-go"; + license = lib.licenses.lgpl3Plus; + maintainers = with lib.maintainers; [ snaki ]; + mainProgram = "speedtest"; + }; +} diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix index 4ffc4eb..644d380 100644 --- a/pkgs/overlay.nix +++ b/pkgs/overlay.nix @@ -4,4 +4,5 @@ final: prev: { update-nixfiles = final.callPackage ./update-nixfiles/default.nix {}; build-worker-oci = final.callPackage ./build-worker-oci/default.nix {}; librespeed-rust = final.callPackage ./librespeed-rust/default.nix {}; + librespeed-go = final.callPackage ./librespeed-go/default.nix {}; }