]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add iridologie via spip
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Sat, 11 Jan 2020 14:34:31 +0000 (15:34 +0100)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Sat, 11 Jan 2020 14:34:31 +0000 (15:34 +0100)
modules/private/environment.nix
modules/private/websites/isabelle/config/chmod.php [new file with mode: 0644]
modules/private/websites/isabelle/config/connect.php [new file with mode: 0644]
modules/private/websites/isabelle/config/ldap.php [new file with mode: 0644]
modules/private/websites/isabelle/iridologie.nix
modules/private/websites/isabelle/spip_builder.nix [new file with mode: 0644]
pkgs/private/webapps/default.nix
pkgs/private/webapps/iridologie/default.nix [new file with mode: 0644]
pkgs/private/webapps/iridologie/iridologie.json [new file with mode: 0644]
pkgs/webapps/spip/default.nix

index 98d50b1d47c5dabea20b21757629f8cfda6828e7..50f153ac141616df1ef7959a9eb1c0e920122274 100644 (file)
@@ -1005,6 +1005,16 @@ in
                   options = {
                     aten_production = atenSubmodule;
                     aten_integration = atenSubmodule;
+                    iridologie = mkOption {
+                      description = "environment configuration";
+                      type = submodule {
+                        options = {
+                          environment = mkOption { type = str; description = "SPIP environment"; };
+                          mysql = mkMysqlOptions "Iridologie" {};
+                          ldap = mkLdapOptions "Iridologie" {};
+                        };
+                      };
+                    };
                   };
                 };
           };
@@ -1016,7 +1026,7 @@ in
                   description = "environment configuration";
                   type = submodule {
                     options = {
-                      environment = mkOption { type = str; description = "Symfony environment"; };
+                      environment = mkOption { type = str; description = "SPIP environment"; };
                       mysql = mkMysqlOptions "Chloe" {};
                       ldap = mkLdapOptions "Chloe" {};
                     };
diff --git a/modules/private/websites/isabelle/config/chmod.php b/modules/private/websites/isabelle/config/chmod.php
new file mode 100644 (file)
index 0000000..aae16cd
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+if (!defined("_ECRIRE_INC_VERSION")) return;
+if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', 0777);
+?>
\ No newline at end of file
diff --git a/modules/private/websites/isabelle/config/connect.php b/modules/private/websites/isabelle/config/connect.php
new file mode 100644 (file)
index 0000000..18b0933
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+if (!defined("_ECRIRE_INC_VERSION")) return;
+define('_MYSQL_SET_SQL_MODE',true);
+$GLOBALS['spip_connect_version'] = 0.7;
+spip_connect_db(
+  getenv("SPIP_MYSQL_HOST"),
+  getenv("SPIP_MYSQL_PORT"),
+  getenv("SPIP_MYSQL_USER"),
+  getenv("SPIP_MYSQL_PASSWORD"),
+  getenv("SPIP_MYSQL_DB"),
+  'mysql',
+  'spip',
+  'ldap.php'
+);
+?>
diff --git a/modules/private/websites/isabelle/config/ldap.php b/modules/private/websites/isabelle/config/ldap.php
new file mode 100644 (file)
index 0000000..825b7ed
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+if (!defined("_ECRIRE_INC_VERSION")) return;
+$GLOBALS['ldap_base'] = getenv("SPIP_LDAP_BASE");
+$GLOBALS['ldap_link'] = @ldap_connect(getenv("SPIP_LDAP_HOST"));
+@ldap_set_option($GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,'3');
+@ldap_bind($GLOBALS['ldap_link'],getenv("SPIP_LDAP_SEARCH_DN"), getenv("SPIP_LDAP_SEARCH_PW"));
+$GLOBALS['ldap_champs'] = array('login' => array('sAMAccountName','uid','login','userid','cn','sn'),'nom' => 'cn','email' => 'mail','bio' => 'description',);
+$GLOBALS['ldap_search'] = getenv("SPIP_LDAP_SEARCH");
+?>
index cb4e3005350600f2f62716e748e2703d1f9b7688..460bd2a902db048e8c6ae9148036883a8e5056d7 100644 (file)
@@ -1,59 +1,49 @@
-{ lib, config,  ... }:
+{ lib, pkgs, config,  ... }:
 let
+  iridologie = pkgs.callPackage ./spip_builder.nix {
+    inherit (pkgs.webapps) iridologie;
+    config = config.myEnv.websites.isabelle.iridologie;
+    apacheUser = config.services.httpd.Prod.user;
+    apacheGroup = config.services.httpd.Prod.group;
+  };
+
   cfg = config.myServices.websites.isabelle.iridologie;
-  varDir = "/var/lib/ftp/isabelle";
 in {
   options.myServices.websites.isabelle.iridologie.enable = lib.mkEnableOption "enable Iridologie's website";
 
   config = lib.mkIf cfg.enable {
+    services.duplyBackup.profiles.iridologie_prod.rootDir = iridologie.app.varDir;
+    secrets.keys = iridologie.keys;
     services.webstats.sites = [ { name = "iridologie.icommandeur.org"; } ];
-    system.activationScripts.iridologie = {
-      deps = [ "httpd" ];
-      text = ''
-        install -m 0755 -o wwwrun -g wwwrun -d /var/lib/php/sessions/iridologie
-        '';
-    };
-    services.phpfpm.pools.iridologie = {
-      listen = "/run/phpfpm/iridologie.sock";
-      extraConfig = ''
-        user = wwwrun
-        group = wwwrun
-        listen.owner = wwwrun
-        listen.group = wwwrun
-
-        pm = ondemand
-        pm.max_children = 5
-        pm.process_idle_timeout = 60
 
-        php_admin_value[open_basedir] = "/var/lib/php/sessions/iridologie:${varDir}:/tmp"
-        php_admin_value[session.save_path] = "/var/lib/php/sessions/iridologie"
-        '';
+    systemd.services.phpfpm-iridologie.after = lib.mkAfter iridologie.phpFpm.serviceDeps;
+    systemd.services.phpfpm-iridologie.wants = iridologie.phpFpm.serviceDeps;
+    services.phpfpm.pools.iridologie = {
+      listen = iridologie.phpFpm.socket;
+      extraConfig = iridologie.phpFpm.pool;
+      phpOptions = config.services.phpfpm.phpOptions + ''
+        extension=${pkgs.php}/lib/php/extensions/mysqli.so
+      '';
     };
-    services.websites.env.production.modules = [ "proxy_fcgi" ];
+    system.activationScripts.iridologie = iridologie.activationScript;
+    myServices.websites.webappDirs."${iridologie.apache.webappName}" = iridologie.app.webRoot;
+    services.websites.env.production.modules = iridologie.apache.modules;
     services.websites.env.production.vhostConfs.iridologie = {
-      certName    = "aten";
-      addToCerts  = true;
-      hosts       = [ "iridologie.icommandeur.org" "icommandeur.org" "www.icommandeur.org" ];
-      root        = varDir;
-      extraConfig = [
+      certName     = "aten";
+      addToCerts   = true;
+      hosts        = [ "iridologie.icommandeur.org" "icommandeur.org" "www.icommandeur.org" ];
+      root         = iridologie.apache.root;
+      extraConfig  = [
         ''
-        Use Stats iridologie.icommandeur.org
-        RewriteEngine On
-        RewriteCond "%{HTTP_HOST}" "!^iridologie\.icommandeur\.org$" [NC]
-        RewriteRule ^(.+)$ https://iridologie.icommandeur.org$1 [R=302,L]
-
-        <FilesMatch "\.php$">
-          SetHandler "proxy:unix:/run/phpfpm/iridologie.sock|fcgi://localhost"
-        </FilesMatch>
-
-        <Directory ${varDir}>
-          DirectoryIndex index.php index.htm index.html
-          AllowOverride All
-          Require all granted
-        </Directory>
+          RewriteEngine On
+          RewriteCond "%{HTTP_HOST}" "!^iridologie\.icommandeur\.org$" [NC]
+          RewriteRule ^(.+)$ https://iridologie.icommandeur.org$1 [R=302,L]
           ''
+        iridologie.apache.vhostConf
       ];
     };
+    services.websites.env.production.watchPaths = [
+      "/var/secrets/webapps/${iridologie.app.environment}-iridologie"
+    ];
   };
 }
-
diff --git a/modules/private/websites/isabelle/spip_builder.nix b/modules/private/websites/isabelle/spip_builder.nix
new file mode 100644 (file)
index 0000000..2ab5394
--- /dev/null
@@ -0,0 +1,99 @@
+{ apacheUser, apacheGroup, iridologie, config }:
+rec {
+  app = iridologie.override { inherit (config) environment; };
+  phpFpm = rec {
+    serviceDeps = [ "mysql.service" ];
+    socket = "/var/run/phpfpm/iridologie-${app.environment}.sock";
+    pool = ''
+      user = ${apacheUser}
+      group = ${apacheGroup}
+      listen.owner = ${apacheUser}
+      listen.group = ${apacheGroup}
+      php_admin_value[upload_max_filesize] = 20M
+      php_admin_value[post_max_size] = 20M
+      ;php_admin_flag[log_errors] = on
+      php_admin_value[open_basedir] = "${app.spipConfig}:${configDir}:${app}:${app.varDir}:/tmp"
+      php_admin_value[session.save_path] = "${app.varDir}/phpSessions"
+      ${if app.environment == "dev" then ''
+      pm = ondemand
+      pm.max_children = 5
+      pm.process_idle_timeout = 60
+      '' else ''
+      pm = dynamic
+      pm.max_children = 20
+      pm.start_servers = 2
+      pm.min_spare_servers = 1
+      pm.max_spare_servers = 3
+      ''}'';
+  };
+  keys = [{
+    dest = "webapps/${app.environment}-iridologie";
+    user = apacheUser;
+    group = apacheGroup;
+    permissions = "0400";
+    text = ''
+      SetEnv SPIP_CONFIG_DIR     "${configDir}"
+      SetEnv SPIP_VAR_DIR        "${app.varDir}"
+      SetEnv SPIP_SITE           "iridologie-${app.environment}"
+      SetEnv SPIP_LDAP_BASE      "dc=immae,dc=eu"
+      SetEnv SPIP_LDAP_HOST      "ldaps://ldap.immae.eu"
+      SetEnv SPIP_LDAP_SEARCH_DN "${config.ldap.dn}"
+      SetEnv SPIP_LDAP_SEARCH_PW "${config.ldap.password}"
+      SetEnv SPIP_LDAP_SEARCH    "${config.ldap.filter}"
+      SetEnv SPIP_MYSQL_HOST     "${config.mysql.host}"
+      SetEnv SPIP_MYSQL_PORT     "${config.mysql.port}"
+      SetEnv SPIP_MYSQL_DB       "${config.mysql.database}"
+      SetEnv SPIP_MYSQL_USER     "${config.mysql.user}"
+      SetEnv SPIP_MYSQL_PASSWORD "${config.mysql.password}"
+    '';
+  }];
+  apache = rec {
+    modules = [ "proxy_fcgi" ];
+    webappName = "iridologie_${app.environment}";
+    root = "/run/current-system/webapps/${webappName}";
+    vhostConf = ''
+      Include /var/secrets/webapps/${app.environment}-iridologie
+
+      RewriteEngine On
+
+      <FilesMatch "\.php$">
+        SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost"
+      </FilesMatch>
+
+      <Directory ${root}>
+        DirectoryIndex index.php index.htm index.html
+        Options -Indexes +FollowSymLinks +MultiViews +Includes
+        Include ${root}/htaccess.txt
+
+        AllowOverride AuthConfig FileInfo Limit
+        Require all granted
+      </Directory>
+
+      <DirectoryMatch "${root}/squelettes">
+        Require all denied
+      </DirectoryMatch>
+
+      <FilesMatch "(.htaccess|rewrite-rules|.gitignore)$">
+        Require all denied
+      </FilesMatch>
+
+      ${if app.environment == "dev" then ''
+      <Location />
+        Use LDAPConnect
+        Require ldap-group cn=isabelle.immae.eu,cn=httpd,ou=services,dc=immae,dc=eu
+        ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=https://iridologie.icommandeur.org\"></html>"
+      </Location>
+      '' else ''
+      Use Stats iridologie.icommandeur.org
+      ''}
+      '';
+  };
+  activationScript = {
+    deps = [ "wrappers" ];
+    text = ''
+      install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} ${app.varDir}/IMG ${app.varDir}/tmp ${app.varDir}/local
+      install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions
+    '';
+  };
+  configDir = ./config;
+}
index e9aa13cecc4d6b22c7a32fe4767403b2d3442709..12b690b84ee8373410e804ee6952d8daa638fc72 100644 (file)
@@ -4,6 +4,7 @@ rec {
 
   aten = callPackage ./aten { inherit composerEnv mylibs; };
   chloe = callPackage ./chloe { inherit mylibs spip; };
+  iridologie = callPackage ./iridologie { inherit mylibs spip; };
   connexionswing = callPackage ./connexionswing { inherit composerEnv mylibs;};
   ludivinecassal = callPackage ./ludivinecassal { inherit composerEnv mylibs; };
   piedsjaloux = callPackage ./piedsjaloux { inherit composerEnv mylibs; };
diff --git a/pkgs/private/webapps/iridologie/default.nix b/pkgs/private/webapps/iridologie/default.nix
new file mode 100644 (file)
index 0000000..8e05736
--- /dev/null
@@ -0,0 +1,15 @@
+{ environment ? "prod"
+, varDir ? "/var/lib/iridologie_${environment}"
+, spip, stdenv, mylibs, sassc }:
+let
+  siteDir = stdenv.mkDerivation (mylibs.fetchedGitPrivate ./iridologie.json // rec {
+    installPhase = ''
+      cp -a . $out
+      '';
+  });
+in
+spip.override {
+  ldap = true;
+  siteName = "iridologie";
+  inherit environment siteDir;
+}
diff --git a/pkgs/private/webapps/iridologie/iridologie.json b/pkgs/private/webapps/iridologie/iridologie.json
new file mode 100644 (file)
index 0000000..cf3b0aa
--- /dev/null
@@ -0,0 +1,13 @@
+{
+  "tag": "01bd963-master",
+  "meta": {
+    "name": "iridologie",
+    "url": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Iridologie",
+    "branch": "master"
+  },
+  "git": {
+    "url": "ssh://gitolite@git.immae.eu/perso/Immae/Sites/Iridologie",
+    "rev": "01bd96345b523e4e6469fdbbb675abd3e7f4662f",
+    "fetchSubmodules": true
+  }
+}
index 8099f53b1381da57d855a7457a1a1e9324d3581c..20d5c8c32a3a8f083754ec462ef6955a0f3aea81 100644 (file)
@@ -7,10 +7,10 @@
 let
   app = stdenv.mkDerivation rec {
     name = "${siteName}-${environment}-spip-${version}";
-    version = "3.2.3";
+    version = "3.2.7";
     src = fetchzip {
       url = "https://files.spip.net/spip/archives/SPIP-v${version}.zip";
-      sha256 = "1r1mjvsnrp6mvkgjakvi3x4ms8m8k5mp93micbbg8r99fj7qlfkq";
+      sha256 = "0n4kc95nhn524zbb11bpfjs965pm4v026s3m3q44pl8nyms91r33";
     };
     paches = lib.optionals ldap [ ./spip_ldap_patch.patch ];
     buildPhase = ''