]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Move kanboard passwords to secure location
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Sun, 14 Apr 2019 21:58:56 +0000 (23:58 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Sun, 14 Apr 2019 21:58:56 +0000 (23:58 +0200)
Related issue: https://git.immae.eu/mantisbt/view.php?id=122

nixops/modules/websites/default.nix
nixops/modules/websites/phpfpm/default.nix
nixops/modules/websites/tools/tools/default.nix
nixops/modules/websites/tools/tools/kanboard.nix

index ad97d7f8a0782db67b0f03e6f1a2efeac2dd84d3..307af084988ea880218346d67e5397a7aea1b3fb 100644 (file)
@@ -167,6 +167,7 @@ in
   };
 
   config = {
+    users.users.wwwrun.extraGroups = [ "keys" ];
     networking.firewall.allowedTCPPorts = [ 80 443 ];
 
     nixpkgs.overlays = [ (self: super: rec {
@@ -415,8 +416,10 @@ in
       phpOptions = ''
         session.save_path = "/var/lib/php/sessions"
         post_max_size = 20M
-        session.gc_maxlifetime = 60*60*24*15
-        session.cache_expire = 60*24*30
+        ; 15 days (seconds)
+        session.gc_maxlifetime = 1296000
+        ; 30 days (minutes)
+        session.cache_expire = 43200
         '';
       extraConfig = ''
         log_level = notice
index 3c6f027ad8dc898903c574cce1f4e2e6e4898eaf..882babcd8e9d61a94c9869c3600dee37db2278cb 100644 (file)
@@ -72,6 +72,17 @@ in {
           "Options appended to the PHP configuration file <filename>php.ini</filename>.";
       };
 
+      serviceDependencies = mkOption {
+        default = {};
+        type = types.attrsOf (types.listOf types.string);
+        example = literalExample ''
+          { mypool = ["postgresql.service"]; }
+        '';
+        description = ''
+          Extra service dependencies specific to pool.
+        '';
+      };
+
       poolPhpConfigs = mkOption {
         default = {};
         type = types.attrsOf types.lines;
@@ -152,7 +163,8 @@ in {
     systemd.services = flip mapAttrs' poolConfigs (pool: poolConfig:
       nameValuePair "phpfpm-${pool}" {
         description = "PHP FastCGI Process Manager service for pool ${pool}";
-        after = [ "network.target" ];
+        after = [ "network.target" ] ++ (cfg.serviceDependencies.${pool} or []);
+        wants = cfg.serviceDependencies.${pool} or [];
         wantedBy = [ "phpfpm.target" ];
         partOf = [ "phpfpm.target" ];
         preStart = ''
index aa59e280d6c254c930b9c3ebf54f2b894acdfdf8..14b5934a5ab7b2a252bb32c548de3576a334f59b 100644 (file)
@@ -46,6 +46,8 @@ in {
     security.acme.certs."eldiron".extraDomains."tools.immae.eu" = null;
     security.acme.certs."eldiron".extraDomains."devtools.immae.eu" = null;
 
+    deployment.keys = kanboard.keys;
+
     services.myWebsites.integration.modules =
       rainloop.apache.modules;
 
@@ -129,6 +131,7 @@ in {
       ];
     };
 
+    services.myPhpfpm.serviceDependencies.kanboard = kanboard.phpFpm.serviceDeps;
     services.myPhpfpm.poolPhpConfigs.roundcubemail = roundcubemail.phpFpm.phpConfig;
     services.myPhpfpm.poolConfigs = {
       adminer = adminer.phpFpm.pool;
index 8408ffa56185f5dfe1747fada5be011971d69b71..35ed2aaace690e8f7db96f1bed37fd4631d028f5 100644 (file)
@@ -10,33 +10,39 @@ rec {
       install -TDm644 ${webRoot}/dataold/web.config ${varDir}/data/web.config
     '';
   };
-  config = writeText "config.php" ''
-    <?php
-    define('MAIL_FROM', 'kanboard@tools.immae.eu');
+  keys.tools-kanboard = {
+    destDir = "/run/keys/webapps";
+    user = apache.user;
+    group = apache.group;
+    permissions = "0700";
+    text = ''
+      <?php
+      define('MAIL_FROM', 'kanboard@tools.immae.eu');
 
-    define('DB_DRIVER', 'postgres');
-    define('DB_USERNAME', '${env.postgresql.user}');
-    define('DB_PASSWORD', '${env.postgresql.password}');
-    define('DB_HOSTNAME', '${env.postgresql.socket}');
-    define('DB_NAME', '${env.postgresql.database}');
+      define('DB_DRIVER', 'postgres');
+      define('DB_USERNAME', '${env.postgresql.user}');
+      define('DB_PASSWORD', '${env.postgresql.password}');
+      define('DB_HOSTNAME', '${env.postgresql.socket}');
+      define('DB_NAME', '${env.postgresql.database}');
 
-    define('LDAP_AUTH', true);
-    define('LDAP_SERVER', '${env.ldap.host}');
-    define('LDAP_START_TLS', true);
+      define('LDAP_AUTH', true);
+      define('LDAP_SERVER', '${env.ldap.host}');
+      define('LDAP_START_TLS', true);
 
-    define('LDAP_BIND_TYPE', 'proxy');
-    define('LDAP_USERNAME', '${env.ldap.dn}');
-    define('LDAP_PASSWORD', '${env.ldap.password}');
-    define('LDAP_USER_BASE_DN', '${env.ldap.base}');
-    define('LDAP_USER_FILTER', '(&(memberOf=cn=users,cn=kanboard,ou=services,dc=immae,dc=eu)(uid=%s))');
-    define('LDAP_GROUP_ADMIN_DN', 'cn=admins,cn=kanboard,ou=services,dc=immae,dc=eu');
-    ?>
-    '';
+      define('LDAP_BIND_TYPE', 'proxy');
+      define('LDAP_USERNAME', '${env.ldap.dn}');
+      define('LDAP_PASSWORD', '${env.ldap.password}');
+      define('LDAP_USER_BASE_DN', '${env.ldap.base}');
+      define('LDAP_USER_FILTER', '(&(memberOf=cn=users,cn=kanboard,ou=services,dc=immae,dc=eu)(uid=%s))');
+      define('LDAP_GROUP_ADMIN_DN', 'cn=admins,cn=kanboard,ou=services,dc=immae,dc=eu');
+      ?>
+      '';
+  };
   webRoot = stdenv.mkDerivation (fetchedGithub ./kanboard.json // rec {
     dontBuild = true;
     installPhase = ''
       cp -a . $out
-      ln -s ${config} $out/config.php
+      ln -s /run/keys/webapps/tools-kanboard $out/config.php
       mv $out/data $out/dataold
       ln -s ${varDir}/data $out/data
       '';
@@ -65,7 +71,8 @@ rec {
       '';
   };
   phpFpm = rec {
-    basedir = builtins.concatStringsSep ":" [ webRoot varDir config ];
+    serviceDeps = [ "postgresql.service" "openldap.service" "tools-kanboard-key.service" ];
+    basedir = builtins.concatStringsSep ":" [ webRoot varDir "/run/keys/webapps/tools-kanboard" ];
     socket = "/var/run/phpfpm/kanboard.sock";
     pool = ''
       listen = ${socket}