]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - modules/private/websites/tools/tools/default.nix
Add fix for glib in nixops
[perso/Immae/Config/Nix.git] / modules / private / websites / tools / tools / default.nix
CommitLineData
ab8f306d 1{ lib, pkgs, config, ... }:
10889174 2let
4288c2f2
IB
3 adminer = pkgs.callPackage ./adminer.nix {
4 inherit (pkgs.webapps) adminer;
5 };
6 ympd = pkgs.callPackage ./ympd.nix {
ab8f306d 7 env = config.myEnv.tools.ympd;
4288c2f2
IB
8 };
9 ttrss = pkgs.callPackage ./ttrss.nix {
10 inherit (pkgs.webapps) ttrss ttrss-plugins;
ab8f306d 11 env = config.myEnv.tools.ttrss;
4288c2f2 12 };
4288c2f2 13 kanboard = pkgs.callPackage ./kanboard.nix {
ab8f306d 14 env = config.myEnv.tools.kanboard;
4288c2f2
IB
15 };
16 wallabag = pkgs.callPackage ./wallabag.nix {
17 inherit (pkgs.webapps) wallabag;
ab8f306d 18 env = config.myEnv.tools.wallabag;
4288c2f2
IB
19 };
20 yourls = pkgs.callPackage ./yourls.nix {
21 inherit (pkgs.webapps) yourls yourls-plugins;
ab8f306d 22 env = config.myEnv.tools.yourls;
4288c2f2
IB
23 };
24 rompr = pkgs.callPackage ./rompr.nix {
25 inherit (pkgs.webapps) rompr;
ab8f306d 26 env = config.myEnv.tools.rompr;
4288c2f2
IB
27 };
28 shaarli = pkgs.callPackage ./shaarli.nix {
ab8f306d 29 env = config.myEnv.tools.shaarli;
4288c2f2
IB
30 };
31 dokuwiki = pkgs.callPackage ./dokuwiki.nix {
32 inherit (pkgs.webapps) dokuwiki dokuwiki-plugins;
33 };
34 ldap = pkgs.callPackage ./ldap.nix {
35 inherit (pkgs.webapps) phpldapadmin;
ab8f306d 36 env = config.myEnv.tools.phpldapadmin;
4288c2f2 37 };
10889174 38
4288c2f2 39 cfg = config.myServices.websites.tools.tools;
10889174 40in {
4288c2f2 41 options.myServices.websites.tools.tools = {
10889174
IB
42 enable = lib.mkEnableOption "enable tools website";
43 };
44
45 config = lib.mkIf cfg.enable {
1a718805 46 secrets.keys =
a840a21c 47 kanboard.keys
8db8e666 48 ++ ldap.keys
8db8e666
IB
49 ++ shaarli.keys
50 ++ ttrss.keys
51 ++ wallabag.keys
52 ++ yourls.keys;
98163486 53
d2e703c5 54 services.duplyBackup.profiles = {
6a8252b1
IB
55 dokuwiki = dokuwiki.backups;
56 kanboard = kanboard.backups;
57 rompr = rompr.backups;
58 shaarli = shaarli.backups;
59 ttrss = ttrss.backups;
60 wallabag = wallabag.backups;
61 };
62
29f8cb85 63 services.websites.env.tools.modules =
1922655a
IB
64 [ "proxy_fcgi" ]
65 ++ adminer.apache.modules
10889174
IB
66 ++ ympd.apache.modules
67 ++ ttrss.apache.modules
133ebaee 68 ++ wallabag.apache.modules
bfe3c9c9 69 ++ yourls.apache.modules
95b20e17 70 ++ rompr.apache.modules
b892dcbe 71 ++ shaarli.apache.modules
f80772dc 72 ++ dokuwiki.apache.modules
d4ed0eff
IB
73 ++ ldap.apache.modules
74 ++ kanboard.apache.modules;
10889174 75
29f8cb85 76 services.websites.env.integration.vhostConfs.devtools = {
46f30ecc 77 certName = "eldiron";
7df420c2 78 addToCerts = true;
46f30ecc 79 hosts = ["devtools.immae.eu" ];
0aae0181 80 root = "/var/lib/ftp/devtools.immae.eu";
46f30ecc 81 extraConfig = [
0aae0181 82 ''
9338c832
IB
83 Timeout 600
84 ProxyTimeout 600
0aae0181
IB
85 <Directory "/var/lib/ftp/devtools.immae.eu">
86 DirectoryIndex index.php index.htm index.html
87 AllowOverride all
88 Require all granted
89 <FilesMatch "\.php$">
90 SetHandler "proxy:unix:/var/run/phpfpm/devtools.sock|fcgi://localhost"
91 </FilesMatch>
92 </Directory>
93 ''
46f30ecc
IB
94 ];
95 };
96
29f8cb85 97 services.websites.env.tools.vhostConfs.tools = {
10889174 98 certName = "eldiron";
7df420c2 99 addToCerts = true;
10889174 100 hosts = ["tools.immae.eu" ];
1922655a 101 root = "/var/lib/ftp/tools.immae.eu";
10889174 102 extraConfig = [
1922655a 103 ''
afcc5de0 104 RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
3f453c7d 105 RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse
afcc5de0 106
1922655a 107 <Directory "/var/lib/ftp/tools.immae.eu">
0eaac6ba 108 DirectoryIndex index.php index.htm index.html
1922655a
IB
109 AllowOverride all
110 Require all granted
111 <FilesMatch "\.php$">
112 SetHandler "proxy:unix:/var/run/phpfpm/tools.sock|fcgi://localhost"
113 </FilesMatch>
114 </Directory>
115 ''
10889174
IB
116 adminer.apache.vhostConf
117 ympd.apache.vhostConf
118 ttrss.apache.vhostConf
aebd817b 119 wallabag.apache.vhostConf
133ebaee 120 yourls.apache.vhostConf
bfe3c9c9 121 rompr.apache.vhostConf
95b20e17 122 shaarli.apache.vhostConf
b892dcbe 123 dokuwiki.apache.vhostConf
f80772dc 124 ldap.apache.vhostConf
d4ed0eff 125 kanboard.apache.vhostConf
10889174
IB
126 ];
127 };
128
29f8cb85 129 services.websites.env.tools.vhostConfs.outils = {
7df420c2
IB
130 certName = "eldiron";
131 addToCerts = true;
3f453c7d 132 hosts = [ "outils.immae.eu" "outils.immae.fr" ];
7df420c2 133 root = null;
70606070
IB
134 extraConfig = [
135 ''
136 RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1
137
138 RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1
139
140 RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1
141 RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1
142
143 RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1
144 RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1
145 RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1
146 RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1
147
148 RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1
149
afcc5de0
IB
150 RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
151
3f453c7d
IB
152 RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse
153
70606070
IB
154 RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1
155 ''
156 ];
157 };
158
f40f5b23
IB
159 systemd.services = {
160 phpfpm-dokuwiki = {
161 after = lib.mkAfter dokuwiki.phpFpm.serviceDeps;
162 wants = dokuwiki.phpFpm.serviceDeps;
163 };
164 phpfpm-kanboard = {
165 after = lib.mkAfter kanboard.phpFpm.serviceDeps;
166 wants = kanboard.phpFpm.serviceDeps;
167 };
168 phpfpm-ldap = {
169 after = lib.mkAfter ldap.phpFpm.serviceDeps;
170 wants = ldap.phpFpm.serviceDeps;
171 };
f40f5b23
IB
172 phpfpm-shaarli = {
173 after = lib.mkAfter shaarli.phpFpm.serviceDeps;
174 wants = shaarli.phpFpm.serviceDeps;
175 };
176 phpfpm-ttrss = {
177 after = lib.mkAfter ttrss.phpFpm.serviceDeps;
178 wants = ttrss.phpFpm.serviceDeps;
179 };
180 phpfpm-wallabag = {
181 after = lib.mkAfter wallabag.phpFpm.serviceDeps;
182 wants = wallabag.phpFpm.serviceDeps;
183 preStart = lib.mkAfter wallabag.phpFpm.preStart;
184 };
185 phpfpm-yourls = {
186 after = lib.mkAfter yourls.phpFpm.serviceDeps;
187 wants = yourls.phpFpm.serviceDeps;
188 };
189 ympd = {
190 description = "Standalone MPD Web GUI written in C";
191 wantedBy = [ "multi-user.target" ];
192 script = ''
193 export MPD_PASSWORD=$(cat /var/secrets/mpd)
194 ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody
195 '';
196 };
197 tt-rss = {
198 description = "Tiny Tiny RSS feeds update daemon";
199 serviceConfig = {
200 User = "wwwrun";
201 ExecStart = "${pkgs.php}/bin/php ${ttrss.webRoot}/update.php --daemon";
202 StandardOutput = "syslog";
203 StandardError = "syslog";
204 PermissionsStartOnly = true;
205 };
206
207 wantedBy = [ "multi-user.target" ];
208 requires = ["postgresql.service"];
209 after = ["network.target" "postgresql.service"];
210 };
211 };
212
17f6eae9
IB
213 services.filesWatcher.ympd = {
214 restart = true;
215 paths = [ "/var/secrets/mpd" ];
216 };
217
f40f5b23
IB
218 services.phpfpm.pools.devtools = {
219 listen = "/var/run/phpfpm/devtools.sock";
220 extraConfig = ''
221 user = wwwrun
222 group = wwwrun
223 listen.owner = wwwrun
224 listen.group = wwwrun
225 pm = dynamic
226 pm.max_children = 60
227 pm.start_servers = 2
228 pm.min_spare_servers = 1
229 pm.max_spare_servers = 10
230
231 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/devtools.immae.eu:/tmp"
232 '';
233 phpOptions = config.services.phpfpm.phpOptions + ''
c75b75a2 234 extension=${pkgs.php}/lib/php/extensions/mysqli.so
0aae0181
IB
235 extension=${pkgs.phpPackages.redis}/lib/php/extensions/redis.so
236 extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
237 zend_extension=${pkgs.php}/lib/php/extensions/opcache.so
238 '';
8eded9ec 239 };
f40f5b23
IB
240
241 services.phpfpm.poolConfigs = {
10889174
IB
242 adminer = adminer.phpFpm.pool;
243 ttrss = ttrss.phpFpm.pool;
aebd817b 244 wallabag = wallabag.phpFpm.pool;
133ebaee 245 yourls = yourls.phpFpm.pool;
bfe3c9c9 246 rompr = rompr.phpFpm.pool;
95b20e17 247 shaarli = shaarli.phpFpm.pool;
b892dcbe 248 dokuwiki = dokuwiki.phpFpm.pool;
f80772dc 249 ldap = ldap.phpFpm.pool;
d4ed0eff 250 kanboard = kanboard.phpFpm.pool;
1922655a
IB
251 tools = ''
252 listen = /var/run/phpfpm/tools.sock
253 user = wwwrun
254 group = wwwrun
255 listen.owner = wwwrun
256 listen.group = wwwrun
257 pm = dynamic
258 pm.max_children = 60
259 pm.start_servers = 2
260 pm.min_spare_servers = 1
261 pm.max_spare_servers = 10
262
263 ; Needed to avoid clashes in browser cookies (same domain)
264 php_value[session.name] = ToolsPHPSESSID
265 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/tools.immae.eu:/tmp"
266 '';
10889174
IB
267 };
268
269 system.activationScripts = {
4288c2f2 270 adminer = adminer.activationScript;
10889174 271 ttrss = ttrss.activationScript;
aebd817b 272 wallabag = wallabag.activationScript;
133ebaee 273 yourls = yourls.activationScript;
bfe3c9c9 274 rompr = rompr.activationScript;
95b20e17 275 shaarli = shaarli.activationScript;
b892dcbe 276 dokuwiki = dokuwiki.activationScript;
d4ed0eff 277 kanboard = kanboard.activationScript;
4288c2f2 278 ldap = ldap.activationScript;
10889174
IB
279 };
280
4288c2f2
IB
281 myServices.websites.webappDirs = {
282 _adminer = adminer.webRoot;
283 "${dokuwiki.apache.webappName}" = dokuwiki.webRoot;
284 "${ldap.apache.webappName}" = "${ldap.webRoot}/htdocs";
285 "${rompr.apache.webappName}" = rompr.webRoot;
4288c2f2
IB
286 "${shaarli.apache.webappName}" = shaarli.webRoot;
287 "${ttrss.apache.webappName}" = ttrss.webRoot;
288 "${wallabag.apache.webappName}" = wallabag.webRoot;
289 "${yourls.apache.webappName}" = yourls.webRoot;
4288c2f2
IB
290 "${kanboard.apache.webappName}" = kanboard.webRoot;
291 };
a95ab089 292
29f8cb85 293 services.websites.env.tools.watchPaths = [
9247b444 294 "/var/secrets/webapps/tools-shaarli"
17f6eae9
IB
295 ];
296 services.filesWatcher.phpfpm-wallabag = {
297 restart = true;
298 paths = [ "/var/secrets/webapps/tools-wallabag" ];
299 };
10889174
IB
300 };
301}
302