kanboard: init at 1.2.42 (#357229)
This commit is contained in:
parent
c2a7c0ae10
commit
53bd25e9e2
@ -28,6 +28,8 @@
|
||||
|
||||
- [Buffyboard](https://gitlab.postmarketos.org/postmarketOS/buffybox/-/tree/master/buffyboard), a framebuffer on-screen keyboard. Available as [services.buffyboard](option.html#opt-services.buffyboard).
|
||||
|
||||
- [KanBoard](https://github.com/kanboard/kanboard), a project management tool that focuses on the Kanban methodology. Available as [services.kanboard](#opt-services.kanboard.enable).
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
## Backward Incompatibilities {#sec-release-25.05-incompatibilities}
|
||||
|
@ -1471,6 +1471,7 @@
|
||||
./services/web-apps/jirafeau.nix
|
||||
./services/web-apps/jitsi-meet.nix
|
||||
./services/web-apps/kasmweb/default.nix
|
||||
./services/web-apps/kanboard.nix
|
||||
./services/web-apps/kavita.nix
|
||||
./services/web-apps/keycloak.nix
|
||||
./services/web-apps/kimai.nix
|
||||
|
175
nixos/modules/services/web-apps/kanboard.nix
Normal file
175
nixos/modules/services/web-apps/kanboard.nix
Normal file
@ -0,0 +1,175 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.services.kanboard;
|
||||
|
||||
toStringAttrs = lib.mapAttrs (lib.const toString);
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ yzx9 ];
|
||||
|
||||
options.services.kanboard = {
|
||||
enable = lib.mkEnableOption "Kanboard";
|
||||
|
||||
package = lib.mkPackageOption pkgs "kanboard" { };
|
||||
|
||||
dataDir = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "/var/lib/kanboard";
|
||||
description = "Default data folder for Kanboard.";
|
||||
example = "/mnt/kanboard";
|
||||
};
|
||||
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "kanboard";
|
||||
description = "User under which Kanboard runs.";
|
||||
};
|
||||
|
||||
group = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "kanboard";
|
||||
description = "Group under which Kanboard runs.";
|
||||
};
|
||||
|
||||
settings = lib.mkOption {
|
||||
type =
|
||||
with lib.types;
|
||||
attrsOf (oneOf [
|
||||
str
|
||||
int
|
||||
bool
|
||||
]);
|
||||
|
||||
default = { };
|
||||
|
||||
description = ''
|
||||
Customize the default settings, refer to <https://github.com/kanboard/kanboard/blob/main/config.default.php>
|
||||
for details on supported values.
|
||||
'';
|
||||
};
|
||||
|
||||
# Nginx
|
||||
domain = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "kanboard";
|
||||
description = "FQDN for the Kanboard instance.";
|
||||
example = "kanboard.example.org";
|
||||
};
|
||||
nginx = lib.mkOption {
|
||||
type = lib.types.nullOr (
|
||||
lib.types.submodule (import ../web-servers/nginx/vhost-options.nix { inherit config lib; })
|
||||
);
|
||||
default = { };
|
||||
description = ''
|
||||
With this option, you can customize an NGINX virtual host which already
|
||||
has sensible defaults for Kanboard. Set to `{ }` if you do not need any
|
||||
customization for the virtual host. If enabled, then by default, the
|
||||
{option}`serverName` is `''${domain}`. If this is set to null (the
|
||||
default), no NGINX virtual host will be configured.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
enableACME = true;
|
||||
forceHttps = true;
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
phpfpm.settings = lib.mkOption {
|
||||
type =
|
||||
with lib.types;
|
||||
attrsOf (oneOf [
|
||||
int
|
||||
str
|
||||
bool
|
||||
]);
|
||||
|
||||
default = { };
|
||||
|
||||
description = ''
|
||||
Options for kanboard's PHPFPM pool.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
users = {
|
||||
users = lib.mkIf (cfg.user == "kanboard") {
|
||||
kanboard = {
|
||||
isSystemUser = true;
|
||||
group = cfg.group;
|
||||
home = cfg.dataDir;
|
||||
createHome = true;
|
||||
};
|
||||
};
|
||||
|
||||
groups = lib.mkIf (cfg.group == "kanboard") {
|
||||
kanboard = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.phpfpm.pools.kanboard = {
|
||||
user = cfg.user;
|
||||
group = cfg.group;
|
||||
|
||||
settings = lib.mkMerge [
|
||||
{
|
||||
"pm" = "dynamic";
|
||||
"php_admin_value[error_log]" = "stderr";
|
||||
"php_admin_flag[log_errors]" = true;
|
||||
"listen.owner" = "nginx";
|
||||
"catch_workers_output" = true;
|
||||
"pm.max_children" = "32";
|
||||
"pm.start_servers" = "2";
|
||||
"pm.min_spare_servers" = "2";
|
||||
"pm.max_spare_servers" = "4";
|
||||
"pm.max_requests" = "500";
|
||||
}
|
||||
cfg.phpfpm.settings
|
||||
];
|
||||
|
||||
phpEnv = lib.mkMerge [
|
||||
{ DATA_DIR = cfg.dataDir; }
|
||||
(toStringAttrs cfg.settings)
|
||||
];
|
||||
};
|
||||
|
||||
services.nginx = lib.mkIf (cfg.nginx != null) {
|
||||
enable = lib.mkDefault true;
|
||||
virtualHosts."${cfg.domain}" = lib.mkMerge [
|
||||
{
|
||||
root = lib.mkForce "${cfg.package}/share/kanboard";
|
||||
locations."/".extraConfig = ''
|
||||
rewrite ^ /index.php;
|
||||
'';
|
||||
locations."~ \\.php$".extraConfig = ''
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_pass unix:${config.services.phpfpm.pools.kanboard.socket};
|
||||
include ${config.services.nginx.package}/conf/fastcgi.conf;
|
||||
include ${config.services.nginx.package}/conf/fastcgi_params;
|
||||
'';
|
||||
locations."~ \\.(js|css|ttf|woff2?|png|jpe?g|svg)$".extraConfig = ''
|
||||
add_header Cache-Control "public, max-age=15778463";
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header X-Robots-Tag none;
|
||||
add_header X-Download-Options noopen;
|
||||
add_header X-Permitted-Cross-Domain-Policies none;
|
||||
add_header Referrer-Policy no-referrer;
|
||||
access_log off;
|
||||
'';
|
||||
extraConfig = ''
|
||||
try_files $uri /index.php;
|
||||
'';
|
||||
}
|
||||
cfg.nginx
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
@ -499,6 +499,7 @@ in {
|
||||
jotta-cli = handleTest ./jotta-cli.nix {};
|
||||
k3s = handleTest ./k3s {};
|
||||
kafka = handleTest ./kafka.nix {};
|
||||
kanboard = handleTest ./web-apps/kanboard.nix {};
|
||||
kanidm = handleTest ./kanidm.nix {};
|
||||
kanidm-provisioning = handleTest ./kanidm-provisioning.nix {};
|
||||
karma = handleTest ./karma.nix {};
|
||||
|
25
nixos/tests/web-apps/kanboard.nix
Normal file
25
nixos/tests/web-apps/kanboard.nix
Normal file
@ -0,0 +1,25 @@
|
||||
import ../make-test-python.nix (
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
name = "kanboard";
|
||||
meta.maintainers = with lib.maintainers; [ yzx9 ];
|
||||
|
||||
nodes = {
|
||||
machine = {
|
||||
services.kanboard = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.wait_for_unit("nginx.service")
|
||||
machine.wait_for_unit("phpfpm-kanboard.service")
|
||||
machine.wait_for_open_port(80)
|
||||
|
||||
machine.succeed("curl -k --fail http://localhost", timeout=10)
|
||||
'';
|
||||
}
|
||||
)
|
46
pkgs/by-name/ka/kanboard/package.nix
Normal file
46
pkgs/by-name/ka/kanboard/package.nix
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
fetchFromGitHub,
|
||||
nixosTests,
|
||||
nix-update-script,
|
||||
php,
|
||||
}:
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "kanboard";
|
||||
version = "1.2.42";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kanboard";
|
||||
repo = "kanboard";
|
||||
rev = "refs/tags/v${finalAttrs.version}";
|
||||
hash = "sha256-/Unxl9Vh9pEWjO89sSviGGPFzUwxdb1mbOfpTFTyRL0=";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/kanboard
|
||||
cp -rv . $out/share/kanboard
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
updateScript = nix-update-script { };
|
||||
tests = lib.optionalAttrs stdenvNoCC.hostPlatform.isLinux {
|
||||
inherit (nixosTests) kanboard;
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
inherit (php.meta) platforms;
|
||||
description = "Kanban project management software";
|
||||
homepage = "https://kanboard.org";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ yzx9 ];
|
||||
};
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user