aboutsummaryrefslogtreecommitdiff
path: root/modules/websites
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2020-03-25 11:57:48 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2020-04-03 16:25:07 +0200
commit5400b9b6f65451d41a9106fae6fc00f97d83f4ef (patch)
tree6ed072da7b1f17ac3994ffea052aa0c0822f8446 /modules/websites
parent441da8aac378f401625e82caf281fa0e26128310 (diff)
downloadNix-5400b9b6f65451d41a9106fae6fc00f97d83f4ef.tar.gz
Nix-5400b9b6f65451d41a9106fae6fc00f97d83f4ef.tar.zst
Nix-5400b9b6f65451d41a9106fae6fc00f97d83f4ef.zip
Upgrade nixos
Diffstat (limited to 'modules/websites')
-rw-r--r--modules/websites/default.nix28
-rw-r--r--modules/websites/httpd-service-builder.nix68
-rw-r--r--modules/websites/php-application.nix31
3 files changed, 51 insertions, 76 deletions
diff --git a/modules/websites/default.nix b/modules/websites/default.nix
index 767a7b2..3f46e65 100644
--- a/modules/websites/default.nix
+++ b/modules/websites/default.nix
@@ -38,7 +38,7 @@ in
38 description = "Name of the httpd instance to assign this type to"; 38 description = "Name of the httpd instance to assign this type to";
39 }; 39 };
40 ips = mkOption { 40 ips = mkOption {
41 type = listOf string; 41 type = listOf str;
42 default = []; 42 default = [];
43 description = "ips to listen to"; 43 description = "ips to listen to";
44 }; 44 };
@@ -59,7 +59,7 @@ in
59 options = { 59 options = {
60 enable = mkEnableOption "Add default no-ssl vhost for this instance"; 60 enable = mkEnableOption "Add default no-ssl vhost for this instance";
61 host = mkOption { 61 host = mkOption {
62 type = string; 62 type = str;
63 description = "The hostname to use for this vhost"; 63 description = "The hostname to use for this vhost";
64 }; 64 };
65 root = mkOption { 65 root = mkOption {
@@ -68,7 +68,7 @@ in
68 description = "The root folder to serve"; 68 description = "The root folder to serve";
69 }; 69 };
70 indexFile = mkOption { 70 indexFile = mkOption {
71 type = string; 71 type = str;
72 default = "index.html"; 72 default = "index.html";
73 description = "The index file to show."; 73 description = "The index file to show.";
74 }; 74 };
@@ -79,8 +79,8 @@ in
79 description = "The fallback vhost that will be defined as first vhost in Apache"; 79 description = "The fallback vhost that will be defined as first vhost in Apache";
80 type = submodule { 80 type = submodule {
81 options = { 81 options = {
82 certName = mkOption { type = string; }; 82 certName = mkOption { type = str; };
83 hosts = mkOption { type = listOf string; }; 83 hosts = mkOption { type = listOf str; };
84 root = mkOption { type = nullOr path; }; 84 root = mkOption { type = nullOr path; };
85 extraConfig = mkOption { type = listOf lines; default = []; }; 85 extraConfig = mkOption { type = listOf lines; default = []; };
86 }; 86 };
@@ -91,7 +91,7 @@ in
91 description = "List of no ssl vhosts to define for Apache"; 91 description = "List of no ssl vhosts to define for Apache";
92 type = attrsOf (submodule { 92 type = attrsOf (submodule {
93 options = { 93 options = {
94 hosts = mkOption { type = listOf string; }; 94 hosts = mkOption { type = listOf str; };
95 root = mkOption { type = nullOr path; }; 95 root = mkOption { type = nullOr path; };
96 extraConfig = mkOption { type = listOf lines; default = []; }; 96 extraConfig = mkOption { type = listOf lines; default = []; };
97 }; 97 };
@@ -102,25 +102,25 @@ in
102 description = "List of vhosts to define for Apache"; 102 description = "List of vhosts to define for Apache";
103 type = attrsOf (submodule { 103 type = attrsOf (submodule {
104 options = { 104 options = {
105 certName = mkOption { type = string; }; 105 certName = mkOption { type = str; };
106 addToCerts = mkOption { 106 addToCerts = mkOption {
107 type = bool; 107 type = bool;
108 default = false; 108 default = false;
109 description = "Use these to certificates. Is ignored (considered true) if certMainHost is not null"; 109 description = "Use these to certificates. Is ignored (considered true) if certMainHost is not null";
110 }; 110 };
111 certMainHost = mkOption { 111 certMainHost = mkOption {
112 type = nullOr string; 112 type = nullOr str;
113 description = "Use that host as 'main host' for acme certs"; 113 description = "Use that host as 'main host' for acme certs";
114 default = null; 114 default = null;
115 }; 115 };
116 hosts = mkOption { type = listOf string; }; 116 hosts = mkOption { type = listOf str; };
117 root = mkOption { type = nullOr path; }; 117 root = mkOption { type = nullOr path; };
118 extraConfig = mkOption { type = listOf lines; default = []; }; 118 extraConfig = mkOption { type = listOf lines; default = []; };
119 }; 119 };
120 }); 120 });
121 }; 121 };
122 watchPaths = mkOption { 122 watchPaths = mkOption {
123 type = listOf string; 123 type = listOf str;
124 default = []; 124 default = [];
125 description = '' 125 description = ''
126 Paths to watch that should trigger a reload of httpd 126 Paths to watch that should trigger a reload of httpd
@@ -178,9 +178,9 @@ in
178 }; 178 };
179 toVhost = ips: vhostConf: { 179 toVhost = ips: vhostConf: {
180 enableSSL = true; 180 enableSSL = true;
181 sslServerCert = "${config.security.acme2.certs."${vhostConf.certName}".directory}/cert.pem"; 181 sslServerCert = "${config.security.acme.certs."${vhostConf.certName}".directory}/cert.pem";
182 sslServerKey = "${config.security.acme2.certs."${vhostConf.certName}".directory}/key.pem"; 182 sslServerKey = "${config.security.acme.certs."${vhostConf.certName}".directory}/key.pem";
183 sslServerChain = "${config.security.acme2.certs."${vhostConf.certName}".directory}/chain.pem"; 183 sslServerChain = "${config.security.acme.certs."${vhostConf.certName}".directory}/chain.pem";
184 logFormat = "combinedVhost"; 184 logFormat = "combinedVhost";
185 listen = map (ip: { inherit ip; port = 443; }) ips; 185 listen = map (ip: { inherit ip; port = 443; }) ips;
186 hostName = builtins.head vhostConf.hosts; 186 hostName = builtins.head vhostConf.hosts;
@@ -231,7 +231,7 @@ in
231 } 231 }
232 ) cfg.env; 232 ) cfg.env;
233 233
234 config.security.acme2.certs = let 234 config.security.acme.certs = let
235 typesToManage = attrsets.filterAttrs (k: v: v.enable) cfg.env; 235 typesToManage = attrsets.filterAttrs (k: v: v.enable) cfg.env;
236 flatVhosts = lists.flatten (attrsets.mapAttrsToList (k: v: 236 flatVhosts = lists.flatten (attrsets.mapAttrsToList (k: v:
237 attrValues v.vhostConfs 237 attrValues v.vhostConfs
diff --git a/modules/websites/httpd-service-builder.nix b/modules/websites/httpd-service-builder.nix
index d049202..f0208ab 100644
--- a/modules/websites/httpd-service-builder.nix
+++ b/modules/websites/httpd-service-builder.nix
@@ -11,8 +11,6 @@ let
11 11
12 httpd = mainCfg.package.out; 12 httpd = mainCfg.package.out;
13 13
14 version24 = !versionOlder httpd.version "2.4";
15
16 httpdConf = mainCfg.configFile; 14 httpdConf = mainCfg.configFile;
17 15
18 php = mainCfg.phpPackage.override { apacheHttpd = httpd.dev; /* otherwise it only gets .out */ }; 16 php = mainCfg.phpPackage.override { apacheHttpd = httpd.dev; /* otherwise it only gets .out */ };
@@ -26,10 +24,9 @@ let
26 else [{ip = "*"; port = 80;}]; 24 else [{ip = "*"; port = 80;}];
27 25
28 getListen = cfg: 26 getListen = cfg:
29 let list = (lib.optional (cfg.port != 0) {ip = "*"; port = cfg.port;}) ++ cfg.listen; 27 if cfg.listen == []
30 in if list == [] 28 then defaultListen cfg
31 then defaultListen cfg 29 else cfg.listen;
32 else list;
33 30
34 listenToString = l: "${l.ip}:${toString l.port}"; 31 listenToString = l: "${l.ip}:${toString l.port}";
35 32
@@ -110,11 +107,10 @@ let
110 "auth_basic" "auth_digest" 107 "auth_basic" "auth_digest"
111 108
112 # Authentication: is the user who he claims to be? 109 # Authentication: is the user who he claims to be?
113 "authn_file" "authn_dbm" "authn_anon" 110 "authn_file" "authn_dbm" "authn_anon" "authn_core"
114 (if version24 then "authn_core" else "authn_alias")
115 111
116 # Authorization: is the user allowed access? 112 # Authorization: is the user allowed access?
117 "authz_user" "authz_groupfile" "authz_host" 113 "authz_user" "authz_groupfile" "authz_host" "authz_core"
118 114
119 # Other modules. 115 # Other modules.
120 "ext_filter" "include" "log_config" "env" "mime_magic" 116 "ext_filter" "include" "log_config" "env" "mime_magic"
@@ -122,14 +118,9 @@ let
122 "mime" "dav" "status" "autoindex" "asis" "info" "dav_fs" 118 "mime" "dav" "status" "autoindex" "asis" "info" "dav_fs"
123 "vhost_alias" "negotiation" "dir" "imagemap" "actions" "speling" 119 "vhost_alias" "negotiation" "dir" "imagemap" "actions" "speling"
124 "userdir" "alias" "rewrite" "proxy" "proxy_http" 120 "userdir" "alias" "rewrite" "proxy" "proxy_http"
125 ] 121 "unixd" "cache" "cache_disk" "slotmem_shm" "socache_shmcb"
126 ++ optionals version24 [
127 "mpm_${mainCfg.multiProcessingModule}" 122 "mpm_${mainCfg.multiProcessingModule}"
128 "authz_core" 123
129 "unixd"
130 "cache" "cache_disk"
131 "slotmem_shm"
132 "socache_shmcb"
133 # For compatibility with old configurations, the new module mod_access_compat is provided. 124 # For compatibility with old configurations, the new module mod_access_compat is provided.
134 "access_compat" 125 "access_compat"
135 ] 126 ]
@@ -138,19 +129,8 @@ let
138 ++ extraApacheModules; 129 ++ extraApacheModules;
139 130
140 131
141 allDenied = if version24 then '' 132 allDenied = "Require all denied";
142 Require all denied 133 allGranted = "Require all granted";
143 '' else ''
144 Order deny,allow
145 Deny from all
146 '';
147
148 allGranted = if version24 then ''
149 Require all granted
150 '' else ''
151 Order allow,deny
152 Allow from all
153 '';
154 134
155 135
156 loggingConf = (if mainCfg.logFormat != "none" then '' 136 loggingConf = (if mainCfg.logFormat != "none" then ''
@@ -183,9 +163,9 @@ let
183 163
184 164
185 sslConf = '' 165 sslConf = ''
186 SSLSessionCache ${if version24 then "shmcb" else "shm"}:${mainCfg.stateDir}/ssl_scache(512000) 166 SSLSessionCache shmcb:${mainCfg.stateDir}/ssl_scache(512000)
187 167
188 ${if version24 then "Mutex" else "SSLMutex"} posixsem 168 Mutex posixsem
189 169
190 SSLRandomSeed startup builtin 170 SSLRandomSeed startup builtin
191 SSLRandomSeed connect builtin 171 SSLRandomSeed connect builtin
@@ -325,9 +305,7 @@ let
325 305
326 ServerRoot ${httpd} 306 ServerRoot ${httpd}
327 307
328 ${optionalString version24 '' 308 DefaultRuntimeDir ${mainCfg.stateDir}/runtime
329 DefaultRuntimeDir ${mainCfg.stateDir}/runtime
330 ''}
331 309
332 PidFile ${mainCfg.stateDir}/httpd.pid 310 PidFile ${mainCfg.stateDir}/httpd.pid
333 311
@@ -361,7 +339,7 @@ let
361 ++ optional enablePerl { name = "perl"; path = "${mod_perl}/modules/mod_perl.so"; } 339 ++ optional enablePerl { name = "perl"; path = "${mod_perl}/modules/mod_perl.so"; }
362 ++ concatMap (svc: svc.extraModules) allSubservices 340 ++ concatMap (svc: svc.extraModules) allSubservices
363 ++ extraForeignModules; 341 ++ extraForeignModules;
364 in concatMapStrings load allModules 342 in concatMapStrings load (unique allModules)
365 } 343 }
366 344
367 AddHandler type-map var 345 AddHandler type-map var
@@ -393,14 +371,6 @@ let
393 # Generate directives for the main server. 371 # Generate directives for the main server.
394 ${perServerConf true mainCfg} 372 ${perServerConf true mainCfg}
395 373
396 # Always enable virtual hosts; it doesn't seem to hurt.
397 ${let
398 listen = concatMap getListen allHosts;
399 uniqueListen = uniqList {inputList = listen;};
400 directives = concatMapStrings (listen: "NameVirtualHost ${listenToString listen}\n") uniqueListen;
401 in optionalString (!version24) directives
402 }
403
404 ${let 374 ${let
405 makeVirtualHost = vhost: '' 375 makeVirtualHost = vhost: ''
406 <VirtualHost ${concatStringsSep " " (map listenToString (getListen vhost))}> 376 <VirtualHost ${concatStringsSep " " (map listenToString (getListen vhost))}>
@@ -663,7 +633,7 @@ in
663 message = "SSL is enabled for httpd, but sslServerCert and/or sslServerKey haven't been specified."; } 633 message = "SSL is enabled for httpd, but sslServerCert and/or sslServerKey haven't been specified."; }
664 ]; 634 ];
665 635
666 warnings = map (cfg: ''apache-httpd's port option is deprecated. Use listen = [{/*ip = "*"; */ port = ${toString cfg.port};}]; instead'' ) (lib.filter (cfg: cfg.port != 0) allHosts); 636 warnings = map (cfg: "apache-httpd's extraSubservices option is deprecated. Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.") (lib.filter (cfg: cfg.extraSubservices != []) allHosts);
667 637
668 users.users = optionalAttrs (withUsers && mainCfg.user == "wwwrun") (singleton 638 users.users = optionalAttrs (withUsers && mainCfg.user == "wwwrun") (singleton
669 { name = "wwwrun"; 639 { name = "wwwrun";
@@ -686,7 +656,7 @@ in
686 656
687 ; Don't advertise PHP 657 ; Don't advertise PHP
688 expose_php = off 658 expose_php = off
689 '' + optionalString (!isNull config.time.timeZone) '' 659 '' + optionalString (config.time.timeZone != null) ''
690 660
691 ; Apparently PHP doesn't use $TZ. 661 ; Apparently PHP doesn't use $TZ.
692 date.timezone = "${config.time.timeZone}" 662 date.timezone = "${config.time.timeZone}"
@@ -713,10 +683,10 @@ in
713 '' 683 ''
714 mkdir -m 0750 -p ${mainCfg.stateDir} 684 mkdir -m 0750 -p ${mainCfg.stateDir}
715 [ $(id -u) != 0 ] || chown root.${mainCfg.group} ${mainCfg.stateDir} 685 [ $(id -u) != 0 ] || chown root.${mainCfg.group} ${mainCfg.stateDir}
716 ${optionalString version24 '' 686
717 mkdir -m 0750 -p "${mainCfg.stateDir}/runtime" 687 mkdir -m 0750 -p "${mainCfg.stateDir}/runtime"
718 [ $(id -u) != 0 ] || chown root.${mainCfg.group} "${mainCfg.stateDir}/runtime" 688 [ $(id -u) != 0 ] || chown root.${mainCfg.group} "${mainCfg.stateDir}/runtime"
719 ''} 689
720 mkdir -m 0700 -p ${mainCfg.logDir} 690 mkdir -m 0700 -p ${mainCfg.logDir}
721 691
722 # Get rid of old semaphores. These tend to accumulate across 692 # Get rid of old semaphores. These tend to accumulate across
diff --git a/modules/websites/php-application.nix b/modules/websites/php-application.nix
index 8ad7a0d..20e2a5d 100644
--- a/modules/websites/php-application.nix
+++ b/modules/websites/php-application.nix
@@ -44,10 +44,15 @@ in
44 description = "Name of the socket to listen to. Defaults to app name if null"; 44 description = "Name of the socket to listen to. Defaults to app name if null";
45 }; 45 };
46 phpPool = mkOption { 46 phpPool = mkOption {
47 type = lines; 47 type = attrsOf str;
48 default = ""; 48 default = {};
49 description = "Pool configuration to append"; 49 description = "Pool configuration to append";
50 }; 50 };
51 phpEnv = mkOption {
52 type = attrsOf str;
53 default = {};
54 description = "Pool environment to append";
55 };
51 phpOptions = mkOption { 56 phpOptions = mkOption {
52 type = lines; 57 type = lines;
53 default = ""; 58 default = "";
@@ -135,7 +140,7 @@ in
135 services.phpApplication.phpListenPaths = mkOption { 140 services.phpApplication.phpListenPaths = mkOption {
136 type = attrsOf path; 141 type = attrsOf path;
137 default = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair 142 default = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
138 name "/run/phpfpm/${if icfg.phpListen == null then name else icfg.phpListen}.sock" 143 name config.services.phpfpm.pools."${name}".socket
139 ) cfg.apps; 144 ) cfg.apps;
140 readOnly = true; 145 readOnly = true;
141 description = '' 146 description = ''
@@ -162,17 +167,17 @@ in
162 167
163 services.phpfpm.pools = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair 168 services.phpfpm.pools = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
164 name { 169 name {
165 listen = cfg.phpListenPaths."${name}"; 170 user = icfg.httpdUser;
166 extraConfig = '' 171 group = icfg.httpdUser;
167 user = ${icfg.httpdUser} 172 settings = {
168 group = ${icfg.httpdGroup} 173 "listen.owner" = icfg.httpdUser;
169 listen.owner = ${icfg.httpdUser} 174 "listen.group" = icfg.httpdGroup;
170 listen.group = ${icfg.httpdGroup} 175 "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" ([icfg.app icfg.varDir] ++ icfg.phpWatchFiles ++ icfg.phpOpenbasedir);
171 ${optionalString (icfg.phpSession) '' 176 }
172 php_admin_value[session.save_path] = "${icfg.varDir}/phpSessions"''} 177 // optionalAttrs (icfg.phpSession) { "php_admin_value[session.save_path]" = "${icfg.varDir}/phpSessions"; }
173 php_admin_value[open_basedir] = "${builtins.concatStringsSep ":" ([icfg.app icfg.varDir] ++ icfg.phpWatchFiles ++ icfg.phpOpenbasedir)}" 178 // icfg.phpPool;
174 '' + icfg.phpPool;
175 phpOptions = config.services.phpfpm.phpOptions + icfg.phpOptions; 179 phpOptions = config.services.phpfpm.phpOptions + icfg.phpOptions;
180 inherit (icfg) phpEnv;
176 } 181 }
177 ) cfg.apps; 182 ) cfg.apps;
178 183