]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Reload httpd service instead of restarting it
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Wed, 22 Apr 2020 20:48:13 +0000 (22:48 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Wed, 22 Apr 2020 20:48:13 +0000 (22:48 +0200)
modules/private/websites/telio_tortay/production.nix
modules/websites/default.nix

index 130f4dbf9e757f6f5f9172e8047c7998fd73f777..cdc61fa931836cc1185b49612cb20000d3a6e84c 100644 (file)
@@ -60,6 +60,10 @@ in {
           SetHandler "proxy:unix:${config.services.phpfpm.pools.telio_tortay.socket}|fcgi://localhost"
         </FilesMatch>
 
+        <Location /xmlrpc.php>
+          AllowOverride None
+          Require all denied
+        </Location>
         <Directory ${varDir}/logs>
           AllowOverride None
           Require all denied
index d5a0f635b0354db0ae775c7a5b877dded3db133d..837d838bb83608c151c68fa4796c82c2d9aea659 100644 (file)
@@ -1,4 +1,4 @@
-{ lib, config, ... }: with lib;
+{ lib, config, pkgs, ... }: with lib;
 let
   cfg = config.services.websites;
 in
@@ -274,4 +274,42 @@ in
         (name: path: "ln -s ${path} $out/${cfg.webappDirsName}/${name}") cfg.webappDirs)
     }
   '';
+
+  config.systemd.services = let
+    package = httpdName: config.services.httpd.${httpdName}.package.out;
+    cfgFile = httpdName: config.services.httpd.${httpdName}.configFile;
+    serviceChange = attrsets.mapAttrs' (name: icfg:
+      attrsets.nameValuePair
+      "httpd${icfg.httpdName}" {
+        stopIfChanged = false;
+        serviceConfig.ExecStart =
+          lib.mkForce "@${package icfg.httpdName}/bin/httpd httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf";
+        serviceConfig.ExecStop =
+          lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful-stop";
+        serviceConfig.ExecReload =
+          lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful";
+      }
+      ) cfg.env;
+    serviceReload = attrsets.mapAttrs' (name: icfg:
+      attrsets.nameValuePair
+      "httpd${icfg.httpdName}-config-reload" {
+        wants = [ "httpd${icfg.httpdName}.service" ];
+        wantedBy = [ "multi-user.target" ];
+        restartTriggers = [ (cfgFile icfg.httpdName) ];
+        # commented, because can cause extra delays during activate for this config:
+        #      services.nginx.virtualHosts."_".locations."/".proxyPass = "http://blabla:3000";
+        # stopIfChanged = false;
+        serviceConfig.Type = "oneshot";
+        serviceConfig.TimeoutSec = 60;
+        script = ''
+          if ${pkgs.systemd}/bin/systemctl -q is-active httpd${icfg.httpdName}.service ; then
+            ${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -t && \
+              ${pkgs.systemd}/bin/systemctl reload httpd${icfg.httpdName}.service
+          fi
+        '';
+        serviceConfig.RemainAfterExit = true;
+      }
+      ) cfg.env;
+  in
+    serviceChange // serviceReload;
 }