nixos/jirefeau: add services.jirafeau
module
Signed-off-by: David Wood <david.wood@codeplay.com>
This commit is contained in:
parent
11beaa4251
commit
60a3d9dd6b
@ -820,6 +820,7 @@
|
|||||||
./services/web-apps/icingaweb2/icingaweb2.nix
|
./services/web-apps/icingaweb2/icingaweb2.nix
|
||||||
./services/web-apps/icingaweb2/module-monitoring.nix
|
./services/web-apps/icingaweb2/module-monitoring.nix
|
||||||
./services/web-apps/ihatemoney
|
./services/web-apps/ihatemoney
|
||||||
|
./services/web-apps/jirafeau.nix
|
||||||
./services/web-apps/limesurvey.nix
|
./services/web-apps/limesurvey.nix
|
||||||
./services/web-apps/mattermost.nix
|
./services/web-apps/mattermost.nix
|
||||||
./services/web-apps/mediawiki.nix
|
./services/web-apps/mediawiki.nix
|
||||||
|
169
nixos/modules/services/web-apps/jirafeau.nix
Normal file
169
nixos/modules/services/web-apps/jirafeau.nix
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.services.jirafeau;
|
||||||
|
|
||||||
|
group = config.services.nginx.group;
|
||||||
|
user = config.services.nginx.user;
|
||||||
|
|
||||||
|
withTrailingSlash = str: if hasSuffix "/" str then str else "${str}/";
|
||||||
|
|
||||||
|
localConfig = pkgs.writeText "config.local.php" ''
|
||||||
|
<?php
|
||||||
|
$cfg['admin_password'] = '${cfg.adminPasswordSha256}';
|
||||||
|
$cfg['web_root'] = 'http://${withTrailingSlash cfg.hostName}';
|
||||||
|
$cfg['var_root'] = '${withTrailingSlash cfg.dataDir}';
|
||||||
|
$cfg['maximal_upload_size'] = ${builtins.toString cfg.maxUploadSizeMegabytes};
|
||||||
|
$cfg['installation_done'] = true;
|
||||||
|
|
||||||
|
${cfg.extraConfig}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.jirafeau = {
|
||||||
|
adminPasswordSha256 = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
SHA-256 of the desired administration password. Leave blank/unset for no password.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dataDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/var/lib/jirafeau/data/";
|
||||||
|
description = "Location of Jirafeau storage directory.";
|
||||||
|
};
|
||||||
|
|
||||||
|
enable = mkEnableOption "Jirafeau file upload application.";
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
example = ''
|
||||||
|
$cfg['style'] = 'courgette';
|
||||||
|
$cfg['organisation'] = 'ACME';
|
||||||
|
'';
|
||||||
|
description = let
|
||||||
|
documentationLink =
|
||||||
|
"https://gitlab.com/mojo42/Jirafeau/-/blob/${cfg.package.version}/lib/config.original.php";
|
||||||
|
in
|
||||||
|
''
|
||||||
|
Jirefeau configuration. Refer to <link xlink:href="${documentationLink}"/> for supported
|
||||||
|
values.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
hostName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "localhost";
|
||||||
|
description = "URL of instance. Must have trailing slash.";
|
||||||
|
};
|
||||||
|
|
||||||
|
maxUploadSizeMegabytes = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 0;
|
||||||
|
description = "Maximum upload size of accepted files.";
|
||||||
|
};
|
||||||
|
|
||||||
|
maxUploadTimeout = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "30m";
|
||||||
|
description = let
|
||||||
|
nginxCoreDocumentation = "http://nginx.org/en/docs/http/ngx_http_core_module.html";
|
||||||
|
in
|
||||||
|
''
|
||||||
|
Timeout for reading client request bodies and headers. Refer to
|
||||||
|
<link xlink:href="${nginxCoreDocumentation}#client_body_timeout"/> and
|
||||||
|
<link xlink:href="${nginxCoreDocumentation}#client_header_timeout"/> for accepted values.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
nginxConfig = mkOption {
|
||||||
|
type = types.submodule
|
||||||
|
(import ../web-servers/nginx/vhost-options.nix { inherit config lib; });
|
||||||
|
default = {};
|
||||||
|
example = {
|
||||||
|
serverAliases = [ "wiki.\${config.networking.domain}" ];
|
||||||
|
};
|
||||||
|
description = "Extra configuration for the nginx virtual host of Jirafeau.";
|
||||||
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.jirafeau;
|
||||||
|
defaultText = "pkgs.jirafeau";
|
||||||
|
description = "Jirafeau package to use";
|
||||||
|
example = "pkgs.jirafeau";
|
||||||
|
};
|
||||||
|
|
||||||
|
poolConfig = mkOption {
|
||||||
|
type = with types; attrsOf (oneOf [ str int bool ]);
|
||||||
|
default = {
|
||||||
|
"pm" = "dynamic";
|
||||||
|
"pm.max_children" = 32;
|
||||||
|
"pm.start_servers" = 2;
|
||||||
|
"pm.min_spare_servers" = 2;
|
||||||
|
"pm.max_spare_servers" = 4;
|
||||||
|
"pm.max_requests" = 500;
|
||||||
|
};
|
||||||
|
description = ''
|
||||||
|
Options for Jirafeau PHP pool. See documentation on <literal>php-fpm.conf</literal> for
|
||||||
|
details on configuration directives.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services = {
|
||||||
|
nginx = {
|
||||||
|
enable = true;
|
||||||
|
virtualHosts."${cfg.hostName}" = mkMerge [
|
||||||
|
cfg.nginxConfig
|
||||||
|
{
|
||||||
|
extraConfig = let
|
||||||
|
clientMaxBodySize =
|
||||||
|
if cfg.maxUploadSizeMegabytes == 0 then "0" else "${cfg.maxUploadSizeMegabytes}m";
|
||||||
|
in
|
||||||
|
''
|
||||||
|
index index.php;
|
||||||
|
client_max_body_size ${clientMaxBodySize};
|
||||||
|
client_body_timeout ${cfg.maxUploadTimeout};
|
||||||
|
client_header_timeout ${cfg.maxUploadTimeout};
|
||||||
|
'';
|
||||||
|
locations = {
|
||||||
|
"~ \\.php$".extraConfig = ''
|
||||||
|
include ${pkgs.nginx}/conf/fastcgi_params;
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
fastcgi_pass unix:${config.services.phpfpm.pools.jirafeau.socket};
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
root = mkForce "${cfg.package}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
phpfpm.pools.jirafeau = {
|
||||||
|
inherit group user;
|
||||||
|
phpEnv."JIRAFEAU_CONFIG" = "${localConfig}";
|
||||||
|
settings = {
|
||||||
|
"listen.mode" = "0660";
|
||||||
|
"listen.owner" = user;
|
||||||
|
"listen.group" = group;
|
||||||
|
} // cfg.poolConfig;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d ${cfg.dataDir} 0750 ${user} ${group} - -"
|
||||||
|
"d ${cfg.dataDir}/files/ 0750 ${user} ${group} - -"
|
||||||
|
"d ${cfg.dataDir}/links/ 0750 ${user} ${group} - -"
|
||||||
|
"d ${cfg.dataDir}/async/ 0750 ${user} ${group} - -"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
@ -137,6 +137,7 @@ in
|
|||||||
jackett = handleTest ./jackett.nix {};
|
jackett = handleTest ./jackett.nix {};
|
||||||
jellyfin = handleTest ./jellyfin.nix {};
|
jellyfin = handleTest ./jellyfin.nix {};
|
||||||
jenkins = handleTest ./jenkins.nix {};
|
jenkins = handleTest ./jenkins.nix {};
|
||||||
|
jirafeau = handleTest ./jirafeau.nix {};
|
||||||
kafka = handleTest ./kafka.nix {};
|
kafka = handleTest ./kafka.nix {};
|
||||||
keepalived = handleTest ./keepalived.nix {};
|
keepalived = handleTest ./keepalived.nix {};
|
||||||
kerberos = handleTest ./kerberos/default.nix {};
|
kerberos = handleTest ./kerberos/default.nix {};
|
||||||
|
22
nixos/tests/jirafeau.nix
Normal file
22
nixos/tests/jirafeau.nix
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import ./make-test-python.nix ({ lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "jirafeau";
|
||||||
|
meta.maintainers = with maintainers; [ davidtwco ];
|
||||||
|
|
||||||
|
nodes.machine = { pkgs, ... }: {
|
||||||
|
services.jirafeau = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
machine.start()
|
||||||
|
machine.wait_for_unit("phpfpm-jirafeau.service")
|
||||||
|
machine.wait_for_unit("nginx.service")
|
||||||
|
machine.wait_for_open_port(80)
|
||||||
|
machine.succeed("curl -sSfL http://localhost/ | grep 'Jirafeau'")
|
||||||
|
'';
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user