diff --git a/nixos/modules/services/web-apps/freshrss.nix b/nixos/modules/services/web-apps/freshrss.nix index 9bd690d21167..a1aae7e31844 100644 --- a/nixos/modules/services/web-apps/freshrss.nix +++ b/nixos/modules/services/web-apps/freshrss.nix @@ -3,6 +3,7 @@ with lib; let cfg = config.services.freshrss; + webserver = config.services.${cfg.webserver}; extension-env = pkgs.buildEnv { name = "freshrss-extensions"; @@ -129,13 +130,25 @@ in example = "/mnt/freshrss"; }; + webserver = mkOption { + type = types.enum [ "nginx" "caddy" "none"]; + default = "nginx"; + description = '' + Whether to use nginx or caddy for virtual host management. + + Further nginx configuration can be done by adapting `services.nginx.virtualHosts.`. + See [](#opt-services.nginx.virtualHosts) for further information. + + Further caddy configuration can be done by adapting `services.caddy.virtualHosts.`. + See [](#opt-services.caddy.virtualHosts) for further information. + ''; + }; + virtualHost = mkOption { - type = types.nullOr types.str; + type = types.str; default = "freshrss"; description = '' - Name of the nginx virtualhost to use and setup. If null, do not setup any virtualhost. - You may need to configure the virtualhost further through services.nginx.virtualHosts., - for example to enable SSL. + Name of the caddy/nginx virtualhost to use and setup. ''; }; @@ -204,8 +217,21 @@ in ''; } ]; + + # Set up a Caddy virtual host. + services.caddy = mkIf (cfg.webserver == "caddy") { + enable = true; + virtualHosts.${cfg.virtualHost}.extraConfig = '' + root * ${config.services.freshrss.package}/p + php_fastcgi unix/${config.services.phpfpm.pools.freshrss.socket} { + env FRESHRSS_DATA_PATH ${config.services.freshrss.dataDir} + } + file_server + ''; + }; + # Set up a Nginx virtual host. - services.nginx = mkIf (cfg.virtualHost != null) { + services.nginx = mkIf (cfg.webserver == "nginx") { enable = true; virtualHosts.${cfg.virtualHost} = { root = "${cfg.package}/p"; @@ -237,8 +263,8 @@ in ${cfg.pool} = { user = "freshrss"; settings = { - "listen.owner" = "nginx"; - "listen.group" = "nginx"; + "listen.owner" = webserver.user; + "listen.group" = webserver.group; "listen.mode" = "0600"; "pm" = "dynamic"; "pm.max_children" = 32; diff --git a/nixos/tests/freshrss/caddy-sqlite.nix b/nixos/tests/freshrss/caddy-sqlite.nix new file mode 100644 index 000000000000..69b62ab3b899 --- /dev/null +++ b/nixos/tests/freshrss/caddy-sqlite.nix @@ -0,0 +1,30 @@ +import ../make-test-python.nix ( + { lib, pkgs, ... }: + { + name = "freshrss-caddy-sqlite"; + meta.maintainers = with lib.maintainers; [ + etu + stunkymonkey + ]; + + nodes.machine = + { pkgs, ... }: + { + services.freshrss = { + enable = true; + baseUrl = "http://localhost"; + passwordFile = pkgs.writeText "password" "secret"; + dataDir = "/srv/freshrss"; + webserver = "caddy"; + virtualHost = "freshrss:80"; + }; + }; + + testScript = '' + machine.wait_for_unit("multi-user.target") + machine.wait_for_open_port(80) + response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://localhost:80/i/") + assert 'Login · FreshRSS' in response, "Login page didn't load successfully" + ''; + } +) diff --git a/nixos/tests/freshrss/default.nix b/nixos/tests/freshrss/default.nix index 67892596ba23..9253ee7f7e4a 100644 --- a/nixos/tests/freshrss/default.nix +++ b/nixos/tests/freshrss/default.nix @@ -5,5 +5,6 @@ http-auth = import ./http-auth.nix { inherit system pkgs; }; none-auth = import ./none-auth.nix { inherit system pkgs; }; pgsql = import ./pgsql.nix { inherit system pkgs; }; - sqlite = import ./sqlite.nix { inherit system pkgs; }; + nginx-sqlite = import ./nginx-sqlite.nix { inherit system pkgs; }; + caddy-sqlite = import ./caddy-sqlite.nix { inherit system pkgs; }; } diff --git a/nixos/tests/freshrss/extensions.nix b/nixos/tests/freshrss/extensions.nix index 7aba55a3f5e1..d2758fd387b4 100644 --- a/nixos/tests/freshrss/extensions.nix +++ b/nixos/tests/freshrss/extensions.nix @@ -17,7 +17,7 @@ import ../make-test-python.nix ( testScript = '' machine.wait_for_unit("multi-user.target") machine.wait_for_open_port(80) - response = machine.succeed("curl -vvv -s http://127.0.0.1:80/i/?c=extension") + response = machine.succeed("curl -vvv -s http://localhost:80/i/?c=extension") assert 'YouTube Video Feed' in response, "Extension not present in extensions page." ''; } diff --git a/nixos/tests/freshrss/http-auth.nix b/nixos/tests/freshrss/http-auth.nix index 84c308a7e48d..f0fb28ee188f 100644 --- a/nixos/tests/freshrss/http-auth.nix +++ b/nixos/tests/freshrss/http-auth.nix @@ -18,7 +18,7 @@ import ../make-test-python.nix ( testScript = '' machine.wait_for_unit("multi-user.target") machine.wait_for_open_port(80) - response = machine.succeed("curl -vvv -s -H 'Host: freshrss' -H 'Remote-User: testuser' http://127.0.0.1:80/i/") + response = machine.succeed("curl -vvv -s -H 'Host: freshrss' -H 'Remote-User: testuser' http://localhost:80/i/") assert 'Account: testuser' in response, "http_auth method didn't work." ''; } diff --git a/nixos/tests/freshrss/sqlite.nix b/nixos/tests/freshrss/nginx-sqlite.nix similarity index 91% rename from nixos/tests/freshrss/sqlite.nix rename to nixos/tests/freshrss/nginx-sqlite.nix index 5edc081e5d7c..2425dc086549 100644 --- a/nixos/tests/freshrss/sqlite.nix +++ b/nixos/tests/freshrss/nginx-sqlite.nix @@ -1,7 +1,7 @@ import ../make-test-python.nix ( { lib, pkgs, ... }: { - name = "freshrss-sqlite"; + name = "freshrss-nginx-sqlite"; meta.maintainers = with lib.maintainers; [ etu stunkymonkey @@ -21,7 +21,7 @@ import ../make-test-python.nix ( testScript = '' machine.wait_for_unit("multi-user.target") machine.wait_for_open_port(80) - response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://127.0.0.1:80/i/") + response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://localhost:80/i/") assert 'Login · FreshRSS' in response, "Login page didn't load successfully" ''; } diff --git a/nixos/tests/freshrss/none-auth.nix b/nixos/tests/freshrss/none-auth.nix index 1a945ebb9b38..1e504a869534 100644 --- a/nixos/tests/freshrss/none-auth.nix +++ b/nixos/tests/freshrss/none-auth.nix @@ -17,7 +17,7 @@ import ../make-test-python.nix ( testScript = '' machine.wait_for_unit("multi-user.target") machine.wait_for_open_port(80) - response = machine.succeed("curl -vvv -s http://127.0.0.1:80/i/") + response = machine.succeed("curl -vvv -s http://localhost:80/i/") assert 'Main stream · FreshRSS' in response, "FreshRSS stream page didn't load successfully" ''; } diff --git a/nixos/tests/freshrss/pgsql.nix b/nixos/tests/freshrss/pgsql.nix index feb3b3bf1314..a3f3f938db98 100644 --- a/nixos/tests/freshrss/pgsql.nix +++ b/nixos/tests/freshrss/pgsql.nix @@ -47,7 +47,7 @@ import ../make-test-python.nix ( machine.wait_for_unit("multi-user.target") machine.wait_for_open_port(5432) machine.wait_for_open_port(80) - response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://127.0.0.1:80/i/") + response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://localhost:80/i/") assert 'Login · FreshRSS' in response, "Login page didn't load successfully" ''; }