aboutsummaryrefslogtreecommitdiff
path: root/virtual/modules/websites/chloe/chloe.nix
blob: ca34b5a00ff8804692aec42856e5cdca1224f1c5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
{ stdenv, lib, checkEnv, fetchzip, fetchurl, fetchedGitPrivate, sassc }:
let
  chloe = { environment ? "dev" }: rec {
    varPrefix = "CHLOE";
    envName= lib.strings.toUpper environment;
    phpFpm = rec {
      socket = "/var/run/phpfpm/chloe-${environment}.sock";
      pool = 
      assert checkEnv "NIXOPS_${varPrefix}_${envName}_MYSQL_PASSWORD";
      assert checkEnv "NIXOPS_${varPrefix}_${envName}_MYSQL_USER";
      assert checkEnv "NIXOPS_${varPrefix}_${envName}_MYSQL_DB";
      assert checkEnv "NIXOPS_${varPrefix}_${envName}_LDAP_DN";
      assert checkEnv "NIXOPS_${varPrefix}_${envName}_LDAP_PASSWORD";
      assert checkEnv "NIXOPS_${varPrefix}_${envName}_LDAP_SEARCH";
      ''
        listen = ${socket}
        user = ${apache.user}
        group = ${apache.group}
        listen.owner = ${apache.user}
        listen.group = ${apache.group}
        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] = "${../commons/spip/spip_mes_options.php}:${configDir}:${webRoot}:${varDir}:/tmp"
        php_admin_value[session.save_path] = "${varDir}/phpSessions"
        env[SPIP_CONFIG_DIR] = "${configDir}"
        env[SPIP_VAR_DIR] = "${varDir}"
        env[SPIP_SITE] = "chloe-${environment}"
        env[SPIP_LDAP_BASE] = "dc=immae,dc=eu"
        env[SPIP_LDAP_HOST] = "ldaps://ldap.immae.eu"
        env[SPIP_LDAP_SEARCH_DN] = "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_LDAP_DN"}"
        env[SPIP_LDAP_SEARCH_PW] = "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_LDAP_PASSWORD"}"
        env[SPIP_LDAP_SEARCH] = "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_LDAP_SEARCH"}"
        env[SPIP_MYSQL_HOST] = "db-1.immae.eu"
        env[SPIP_MYSQL_DB] = "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_MYSQL_DB"}"
        env[SPIP_MYSQL_USER] = "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_MYSQL_USER"}"
        env[SPIP_MYSQL_PASSWORD] = "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_MYSQL_PASSWORD"}"
        ${if 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
        ''}'';
    };
    apache = {
      user = "wwwrun";
      group = "wwwrun";
      modules = [ "proxy_fcgi" ];
      vhostConf = ''
        RewriteEngine On
        ${if environment == "prod" then ''
        RewriteRule ^/news.rss  /spip.php?page=backend&id_rubrique=1
        '' else ""}

        <FilesMatch "\.php$">
          SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost"
        </FilesMatch>

        <Directory ${webRoot}>
          DirectoryIndex index.php index.htm index.html
          Options -Indexes +FollowSymLinks +MultiViews +Includes
          Include ${webRoot}/htaccess.txt

          AllowOverride AuthConfig FileInfo Limit
          Require all granted
        </Directory>

        <DirectoryMatch "${webRoot}/squelettes">
          Require all denied
        </DirectoryMatch>

        <FilesMatch "(.htaccess|rewrite-rules|.gitignore)$">
          Require all denied
        </FilesMatch>

        ${if environment == "dev" then ''
        <Location />
          Use LDAPConnect
          Require ldap-group cn=chloe.immae.eu,cn=httpd,ou=services,dc=immae,dc=eu
          ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=https://osteopathe-cc.fr\"></html>"
        </Location>
        '' else ''
        Use Stats osteopathe-cc.fr
        ''}
        '';
    };
    activationScript = {
      deps = [ "wrappers" ];
      text = ''
        install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} ${varDir}/IMG ${varDir}/tmp ${varDir}/local
        install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
      '';
    };
    configDir = ./chloe_config_ + environment;
    varDir = "/var/lib/chloe_${environment}";
    siteDir = stdenv.mkDerivation (fetchedGitPrivate ./chloe.json // rec {
      buildPhase = ''
        make
        '';
      installPhase = ''
        cp -a . $out
        '';
      buildInputs = [ sassc ];
    });
    webRoot = stdenv.mkDerivation rec {
      name = "chloe-${environment}-spip-${version}";
      version = "3.2";
      src = fetchzip {
        url = "http://files.spip.org/spip/stable/spip-${version}.zip";
        sha256 = "0cacpxs9nv61i3hzd3nbmplq4mp22s886llhacp3n4923jd6snx5";
      };
      paches = [ ../commons/spip/spip_ldap_patch.patch ];
      buildPhase = ''
        rm -rf IMG local tmp config/remove.txt
        ln -sf ${../commons/spip/spip_mes_options.php} config/mes_options.php
        echo "Require all denied" > "config/.htaccess"
        ln -sf ../../../../../${varDir}/{IMG,local} .
      '';
      installPhase = ''
        cp -a . $out
        cp -a ${siteDir}/* $out
      '';
    };
  };
in
  chloe