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] = "${./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;
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 = [ ./spip_ldap_patch.patch ];
buildPhase = ''
rm -rf IMG local tmp config/remove.txt
ln -sf ${./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
|