From 3202103432740456167424a317c9d40508497a02 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Wed, 22 Apr 2020 22:48:13 +0200 Subject: [PATCH] Reload httpd service instead of restarting it --- .../websites/telio_tortay/production.nix | 4 ++ modules/websites/default.nix | 40 ++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/modules/private/websites/telio_tortay/production.nix b/modules/private/websites/telio_tortay/production.nix index 130f4db..cdc61fa 100644 --- a/modules/private/websites/telio_tortay/production.nix +++ b/modules/private/websites/telio_tortay/production.nix @@ -60,6 +60,10 @@ in { SetHandler "proxy:unix:${config.services.phpfpm.pools.telio_tortay.socket}|fcgi://localhost" + + AllowOverride None + Require all denied + AllowOverride None Require all denied diff --git a/modules/websites/default.nix b/modules/websites/default.nix index d5a0f63..837d838 100644 --- a/modules/websites/default.nix +++ b/modules/websites/default.nix @@ -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; } -- 2.41.0