New NixOS module: services.winstone, for running instances of the Winstone Java Servlet container
This commit is contained in:
parent
ec3dbdf93d
commit
f24940330b
@ -231,6 +231,7 @@
|
||||
./services/web-servers/phpfpm.nix
|
||||
./services/web-servers/tomcat.nix
|
||||
./services/web-servers/varnish/default.nix
|
||||
./services/web-servers/winstone.nix
|
||||
./services/web-servers/zope2.nix
|
||||
./services/x11/desktop-managers/default.nix
|
||||
./services/x11/display-managers/auto.nix
|
||||
|
120
nixos/modules/services/web-servers/winstone.nix
Normal file
120
nixos/modules/services/web-servers/winstone.nix
Normal file
@ -0,0 +1,120 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.services.winstone;
|
||||
|
||||
winstoneOpts = { name, ... }: {
|
||||
options = {
|
||||
name = mkOption {
|
||||
default = name;
|
||||
internal = true;
|
||||
};
|
||||
|
||||
warFile = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The WAR file that Winstone should serve.
|
||||
'';
|
||||
};
|
||||
|
||||
javaPackage = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.openjre;
|
||||
description = ''
|
||||
Which Java derivation to use for running Winstone.
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The user that should run this Winstone process and
|
||||
own the working directory.
|
||||
'';
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The group that will own the working directory.
|
||||
'';
|
||||
};
|
||||
|
||||
workDir = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The working directory for this Winstone instance. Will
|
||||
contain extracted webapps etc. The directory will be
|
||||
created if it doesn't exist.
|
||||
'';
|
||||
};
|
||||
|
||||
extraJavaOptions = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
description = ''
|
||||
Extra command line options given to the java process running
|
||||
Winstone.
|
||||
'';
|
||||
};
|
||||
|
||||
extraOptions = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
description = ''
|
||||
Extra command line options given to the Winstone process.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
workDir = mkDefault "/run/winstone/${name}";
|
||||
};
|
||||
};
|
||||
|
||||
mkService = cfg: let
|
||||
opts = concatStringsSep " " (cfg.extraOptions ++ [
|
||||
"--warfile ${cfg.warFile}"
|
||||
]);
|
||||
|
||||
javaOpts = concatStringsSep " " (cfg.extraJavaOptions ++ [
|
||||
"-Djava.io.tmpdir=${cfg.workDir}"
|
||||
"-jar ${pkgs.winstone}/lib/winstone.jar"
|
||||
]);
|
||||
in {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "winstone service for ${cfg.name}";
|
||||
preStart = ''
|
||||
mkdir -p "${cfg.workDir}"
|
||||
chown ${cfg.user}:${cfg.group} "${cfg.workDir}"
|
||||
'';
|
||||
serviceConfig = {
|
||||
ExecStart = "${cfg.javaPackage}/bin/java ${javaOpts} ${opts}";
|
||||
User = cfg.user;
|
||||
PermissionsStartOnly = true;
|
||||
};
|
||||
};
|
||||
|
||||
in {
|
||||
|
||||
options = {
|
||||
services.winstone = mkOption {
|
||||
default = {};
|
||||
type = types.attrsOf types.optionSet;
|
||||
options = [ winstoneOpts ];
|
||||
description = ''
|
||||
Defines independent Winstone services, each serving one WAR-file.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg != {}) {
|
||||
|
||||
systemd.services = mapAttrs' (n: c: nameValuePair "winstone-${n}" (mkService c)) cfg;
|
||||
|
||||
};
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user