aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/web-servers/caddy.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/web-servers/caddy.nix')
-rw-r--r--nixpkgs/nixos/modules/services/web-servers/caddy.nix66
1 files changed, 55 insertions, 11 deletions
diff --git a/nixpkgs/nixos/modules/services/web-servers/caddy.nix b/nixpkgs/nixos/modules/services/web-servers/caddy.nix
index 0e6e10a5f47..dda26fe491a 100644
--- a/nixpkgs/nixos/modules/services/web-servers/caddy.nix
+++ b/nixpkgs/nixos/modules/services/web-servers/caddy.nix
@@ -5,6 +5,26 @@ with lib;
let
cfg = config.services.caddy;
configFile = pkgs.writeText "Caddyfile" cfg.config;
+
+ # v2-specific options
+ isCaddy2 = versionAtLeast cfg.package.version "2.0";
+ tlsConfig = {
+ apps.tls.automation.policies = [{
+ issuer = {
+ inherit (cfg) ca email;
+ module = "acme";
+ };
+ }];
+ };
+
+ adaptedConfig = pkgs.runCommand "caddy-config-adapted.json" { } ''
+ ${cfg.package}/bin/caddy adapt \
+ --config ${configFile} --adapter ${cfg.adapter} > $out
+ '';
+ tlsJSON = pkgs.writeText "tls.json" (builtins.toJSON tlsConfig);
+ configJSON = pkgs.runCommand "caddy-config.json" { } ''
+ ${pkgs.jq}/bin/jq -s '.[0] * .[1]' ${adaptedConfig} ${tlsJSON} > $out
+ '';
in {
options.services.caddy = {
enable = mkEnableOption "Caddy web server";
@@ -13,15 +33,26 @@ in {
default = "";
example = ''
example.com {
- gzip
- minify
- log syslog
-
- root /srv/http
+ encode gzip
+ log
+ root /srv/http
}
'';
type = types.lines;
- description = "Verbatim Caddyfile to use";
+ description = ''
+ Verbatim Caddyfile to use.
+ Caddy v2 supports multiple config formats via adapters (see <option>services.caddy.adapter</option>).
+ '';
+ };
+
+ adapter = mkOption {
+ default = "caddyfile";
+ example = "nginx";
+ type = types.str;
+ description = ''
+ Name of the config adapter to use. Not applicable to Caddy v1.
+ See https://caddyserver.com/docs/config-adapters for the full list.
+ '';
};
ca = mkOption {
@@ -50,33 +81,46 @@ in {
The data directory, for storing certificates. Before 17.09, this
would create a .caddy directory. With 17.09 the contents of the
.caddy directory are in the specified data directory instead.
+
+ Caddy v2 replaced CADDYPATH with XDG directories.
+ See https://caddyserver.com/docs/conventions#file-locations.
'';
};
package = mkOption {
default = pkgs.caddy;
defaultText = "pkgs.caddy";
+ example = "pkgs.caddy1";
type = types.package;
- description = "Caddy package to use.";
+ description = ''
+ Caddy package to use.
+ To use Caddy v1 (obsolete), set this to <literal>pkgs.caddy1</literal>.
+ '';
};
};
config = mkIf cfg.enable {
systemd.services.caddy = {
description = "Caddy web server";
- # upstream unit: https://github.com/caddyserver/caddy/blob/master/dist/init/linux-systemd/caddy.service
+ # upstream unit: https://github.com/caddyserver/dist/blob/master/init/caddy.service
after = [ "network-online.target" ];
wants = [ "network-online.target" ]; # systemd-networkd-wait-online.service
wantedBy = [ "multi-user.target" ];
- environment = mkIf (versionAtLeast config.system.stateVersion "17.09")
+ environment = mkIf (versionAtLeast config.system.stateVersion "17.09" && !isCaddy2)
{ CADDYPATH = cfg.dataDir; };
serviceConfig = {
- ExecStart = ''
+ ExecStart = if isCaddy2 then ''
+ ${cfg.package}/bin/caddy run --config ${configJSON}
+ '' else ''
${cfg.package}/bin/caddy -log stdout -log-timestamps=false \
-root=/var/tmp -conf=${configFile} \
-ca=${cfg.ca} -email=${cfg.email} ${optionalString cfg.agree "-agree"}
'';
- ExecReload = "${pkgs.coreutils}/bin/kill -USR1 $MAINPID";
+ ExecReload =
+ if isCaddy2 then
+ "${cfg.package}/bin/caddy reload --config ${configJSON}"
+ else
+ "${pkgs.coreutils}/bin/kill -USR1 $MAINPID";
Type = "simple";
User = "caddy";
Group = "caddy";