parent
18790e45d8
commit
cc89d6c8e9
@ -0,0 +1,141 @@ |
||||
{ config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
|
||||
cfg = config.services.confluence; |
||||
|
||||
pkg = pkgs.atlassian-confluence; |
||||
|
||||
in |
||||
|
||||
{ |
||||
options = { |
||||
services.confluence = { |
||||
enable = mkEnableOption "Atlassian Confluence service"; |
||||
|
||||
user = mkOption { |
||||
type = types.str; |
||||
default = "confluence"; |
||||
description = "User which runs confluence."; |
||||
}; |
||||
|
||||
group = mkOption { |
||||
type = types.str; |
||||
default = "confluence"; |
||||
description = "Group which runs confluence."; |
||||
}; |
||||
|
||||
home = mkOption { |
||||
type = types.str; |
||||
default = "/var/lib/confluence"; |
||||
description = "Home directory of the confluence instance."; |
||||
}; |
||||
|
||||
listenAddress = mkOption { |
||||
type = types.str; |
||||
default = "127.0.0.1"; |
||||
description = "Address to listen on."; |
||||
}; |
||||
|
||||
listenPort = mkOption { |
||||
type = types.int; |
||||
default = 8090; |
||||
description = "Port to listen on."; |
||||
}; |
||||
|
||||
catalinaOptions = mkOption { |
||||
type = types.listOf types.str; |
||||
default = []; |
||||
example = [ "-Xms1024m" "-Xmx2048m" "-Dconfluence.disable.peopledirectory.all=true" ]; |
||||
description = "Java options to pass to catalina/tomcat."; |
||||
}; |
||||
|
||||
proxy = { |
||||
enable = mkEnableOption "proxy support"; |
||||
|
||||
name = mkOption { |
||||
type = types.str; |
||||
example = "confluence.example.com"; |
||||
description = "Virtual hostname at the proxy"; |
||||
}; |
||||
|
||||
port = mkOption { |
||||
type = types.int; |
||||
default = 443; |
||||
example = 80; |
||||
description = "Port used at the proxy"; |
||||
}; |
||||
|
||||
scheme = mkOption { |
||||
type = types.str; |
||||
default = "https"; |
||||
example = "http"; |
||||
description = "Protocol used at the proxy."; |
||||
}; |
||||
}; |
||||
|
||||
jrePackage = let |
||||
jreSwitch = unfree: free: if config.nixpkgs.config.allowUnfree or false then unfree else free; |
||||
in mkOption { |
||||
type = types.package; |
||||
default = jreSwitch pkgs.oraclejre8 pkgs.openjdk8.jre; |
||||
defaultText = jreSwitch "pkgs.oraclejre8" "pkgs.openjdk8.jre"; |
||||
example = literalExample "pkgs.openjdk8.jre"; |
||||
description = "Java Runtime to use for Confluence. Note that Atlassian recommends the Oracle JRE."; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.enable { |
||||
users.extraUsers."${cfg.user}" = { |
||||
isSystemUser = true; |
||||
group = cfg.group; |
||||
}; |
||||
|
||||
users.extraGroups."${cfg.group}" = {}; |
||||
|
||||
systemd.services.confluence = { |
||||
description = "Atlassian Confluence"; |
||||
|
||||
wantedBy = [ "multi-user.target" ]; |
||||
requires = [ "postgresql.service" ]; |
||||
after = [ "postgresql.service" ]; |
||||
|
||||
path = [ cfg.jrePackage ]; |
||||
|
||||
environment = { |
||||
CONF_USER = cfg.user; |
||||
JAVA_HOME = "${cfg.jrePackage}"; |
||||
CATALINA_OPTS = concatStringsSep " " cfg.catalinaOptions; |
||||
}; |
||||
|
||||
preStart = '' |
||||
mkdir -p ${cfg.home}/{logs,work,temp,deploy} |
||||
|
||||
mkdir -p /run/confluence |
||||
ln -sf ${cfg.home}/{logs,work,temp,server.xml} /run/confluence |
||||
ln -sf ${cfg.home} /run/confluence/home |
||||
|
||||
chown -R ${cfg.user} ${cfg.home} |
||||
|
||||
sed -e 's,port="8090",port="${toString cfg.listenPort}" address="${cfg.listenAddress}",' \ |
||||
'' + (lib.optionalString cfg.proxy.enable '' |
||||
-e 's,protocol="org.apache.coyote.http11.Http11NioProtocol",protocol="org.apache.coyote.http11.Http11NioProtocol" proxyName="${cfg.proxy.name}" proxyPort="${toString cfg.proxy.port}" scheme="${cfg.proxy.scheme}",' \ |
||||
'') + '' |
||||
${pkg}/conf/server.xml.dist > ${cfg.home}/server.xml |
||||
''; |
||||
|
||||
script = "${pkg}/bin/start-confluence.sh -fg"; |
||||
stopScript = "${pkg}/bin/stop-confluence.sh"; |
||||
|
||||
serviceConfig = { |
||||
User = cfg.user; |
||||
Group = cfg.group; |
||||
PrivateTmp = true; |
||||
PermissionsStartOnly = true; |
||||
}; |
||||
}; |
||||
}; |
||||
} |
Loading…
Reference in new issue