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/phpfpm.nix
|
||||||
./services/web-servers/tomcat.nix
|
./services/web-servers/tomcat.nix
|
||||||
./services/web-servers/varnish/default.nix
|
./services/web-servers/varnish/default.nix
|
||||||
|
./services/web-servers/winstone.nix
|
||||||
./services/web-servers/zope2.nix
|
./services/web-servers/zope2.nix
|
||||||
./services/x11/desktop-managers/default.nix
|
./services/x11/desktop-managers/default.nix
|
||||||
./services/x11/display-managers/auto.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…
x
Reference in New Issue
Block a user