]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - modules/private/websites/tools/tools/default.nix
Add specification for the private config file as a module.
[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
IB
82 ''
83 <Directory "/var/lib/ftp/devtools.immae.eu">
84 DirectoryIndex index.php index.htm index.html
85 AllowOverride all
86 Require all granted
87 <FilesMatch "\.php$">
88 SetHandler "proxy:unix:/var/run/phpfpm/devtools.sock|fcgi://localhost"
89 </FilesMatch>
90 </Directory>
91 ''
46f30ecc
IB
92 ];
93 };
94
29f8cb85 95 services.websites.env.tools.vhostConfs.tools = {
10889174 96 certName = "eldiron";
7df420c2 97 addToCerts = true;
10889174 98 hosts = ["tools.immae.eu" ];
1922655a 99 root = "/var/lib/ftp/tools.immae.eu";
10889174 100 extraConfig = [
1922655a 101 ''
afcc5de0
IB
102 RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
103
1922655a 104 <Directory "/var/lib/ftp/tools.immae.eu">
0eaac6ba 105 DirectoryIndex index.php index.htm index.html
1922655a
IB
106 AllowOverride all
107 Require all granted
108 <FilesMatch "\.php$">
109 SetHandler "proxy:unix:/var/run/phpfpm/tools.sock|fcgi://localhost"
110 </FilesMatch>
111 </Directory>
112 ''
10889174
IB
113 adminer.apache.vhostConf
114 ympd.apache.vhostConf
115 ttrss.apache.vhostConf
aebd817b 116 wallabag.apache.vhostConf
133ebaee 117 yourls.apache.vhostConf
bfe3c9c9 118 rompr.apache.vhostConf
95b20e17 119 shaarli.apache.vhostConf
b892dcbe 120 dokuwiki.apache.vhostConf
f80772dc 121 ldap.apache.vhostConf
d4ed0eff 122 kanboard.apache.vhostConf
10889174
IB
123 ];
124 };
125
29f8cb85 126 services.websites.env.tools.vhostConfs.outils = {
7df420c2
IB
127 certName = "eldiron";
128 addToCerts = true;
129 hosts = [ "outils.immae.eu" ];
130 root = null;
70606070
IB
131 extraConfig = [
132 ''
133 RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1
134
135 RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1
136
137 RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1
138 RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1
139
140 RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1
141 RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1
142 RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1
143 RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1
144
145 RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1
146
afcc5de0
IB
147 RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
148
70606070
IB
149 RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1
150 ''
151 ];
152 };
153
f40f5b23
IB
154 systemd.services = {
155 phpfpm-dokuwiki = {
156 after = lib.mkAfter dokuwiki.phpFpm.serviceDeps;
157 wants = dokuwiki.phpFpm.serviceDeps;
158 };
159 phpfpm-kanboard = {
160 after = lib.mkAfter kanboard.phpFpm.serviceDeps;
161 wants = kanboard.phpFpm.serviceDeps;
162 };
163 phpfpm-ldap = {
164 after = lib.mkAfter ldap.phpFpm.serviceDeps;
165 wants = ldap.phpFpm.serviceDeps;
166 };
f40f5b23
IB
167 phpfpm-shaarli = {
168 after = lib.mkAfter shaarli.phpFpm.serviceDeps;
169 wants = shaarli.phpFpm.serviceDeps;
170 };
171 phpfpm-ttrss = {
172 after = lib.mkAfter ttrss.phpFpm.serviceDeps;
173 wants = ttrss.phpFpm.serviceDeps;
174 };
175 phpfpm-wallabag = {
176 after = lib.mkAfter wallabag.phpFpm.serviceDeps;
177 wants = wallabag.phpFpm.serviceDeps;
178 preStart = lib.mkAfter wallabag.phpFpm.preStart;
179 };
180 phpfpm-yourls = {
181 after = lib.mkAfter yourls.phpFpm.serviceDeps;
182 wants = yourls.phpFpm.serviceDeps;
183 };
184 ympd = {
185 description = "Standalone MPD Web GUI written in C";
186 wantedBy = [ "multi-user.target" ];
187 script = ''
188 export MPD_PASSWORD=$(cat /var/secrets/mpd)
189 ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody
190 '';
191 };
192 tt-rss = {
193 description = "Tiny Tiny RSS feeds update daemon";
194 serviceConfig = {
195 User = "wwwrun";
196 ExecStart = "${pkgs.php}/bin/php ${ttrss.webRoot}/update.php --daemon";
197 StandardOutput = "syslog";
198 StandardError = "syslog";
199 PermissionsStartOnly = true;
200 };
201
202 wantedBy = [ "multi-user.target" ];
203 requires = ["postgresql.service"];
204 after = ["network.target" "postgresql.service"];
205 };
206 };
207
17f6eae9
IB
208 services.filesWatcher.ympd = {
209 restart = true;
210 paths = [ "/var/secrets/mpd" ];
211 };
212
f40f5b23
IB
213 services.phpfpm.pools.devtools = {
214 listen = "/var/run/phpfpm/devtools.sock";
215 extraConfig = ''
216 user = wwwrun
217 group = wwwrun
218 listen.owner = wwwrun
219 listen.group = wwwrun
220 pm = dynamic
221 pm.max_children = 60
222 pm.start_servers = 2
223 pm.min_spare_servers = 1
224 pm.max_spare_servers = 10
225
226 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/devtools.immae.eu:/tmp"
227 '';
228 phpOptions = config.services.phpfpm.phpOptions + ''
c75b75a2 229 extension=${pkgs.php}/lib/php/extensions/mysqli.so
0aae0181
IB
230 extension=${pkgs.phpPackages.redis}/lib/php/extensions/redis.so
231 extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
232 zend_extension=${pkgs.php}/lib/php/extensions/opcache.so
233 '';
8eded9ec 234 };
f40f5b23
IB
235
236 services.phpfpm.poolConfigs = {
10889174
IB
237 adminer = adminer.phpFpm.pool;
238 ttrss = ttrss.phpFpm.pool;
aebd817b 239 wallabag = wallabag.phpFpm.pool;
133ebaee 240 yourls = yourls.phpFpm.pool;
bfe3c9c9 241 rompr = rompr.phpFpm.pool;
95b20e17 242 shaarli = shaarli.phpFpm.pool;
b892dcbe 243 dokuwiki = dokuwiki.phpFpm.pool;
f80772dc 244 ldap = ldap.phpFpm.pool;
d4ed0eff 245 kanboard = kanboard.phpFpm.pool;
1922655a
IB
246 tools = ''
247 listen = /var/run/phpfpm/tools.sock
248 user = wwwrun
249 group = wwwrun
250 listen.owner = wwwrun
251 listen.group = wwwrun
252 pm = dynamic
253 pm.max_children = 60
254 pm.start_servers = 2
255 pm.min_spare_servers = 1
256 pm.max_spare_servers = 10
257
258 ; Needed to avoid clashes in browser cookies (same domain)
259 php_value[session.name] = ToolsPHPSESSID
260 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/tools.immae.eu:/tmp"
261 '';
10889174
IB
262 };
263
264 system.activationScripts = {
4288c2f2 265 adminer = adminer.activationScript;
10889174 266 ttrss = ttrss.activationScript;
aebd817b 267 wallabag = wallabag.activationScript;
133ebaee 268 yourls = yourls.activationScript;
bfe3c9c9 269 rompr = rompr.activationScript;
95b20e17 270 shaarli = shaarli.activationScript;
b892dcbe 271 dokuwiki = dokuwiki.activationScript;
d4ed0eff 272 kanboard = kanboard.activationScript;
4288c2f2 273 ldap = ldap.activationScript;
10889174
IB
274 };
275
4288c2f2
IB
276 myServices.websites.webappDirs = {
277 _adminer = adminer.webRoot;
278 "${dokuwiki.apache.webappName}" = dokuwiki.webRoot;
279 "${ldap.apache.webappName}" = "${ldap.webRoot}/htdocs";
280 "${rompr.apache.webappName}" = rompr.webRoot;
4288c2f2
IB
281 "${shaarli.apache.webappName}" = shaarli.webRoot;
282 "${ttrss.apache.webappName}" = ttrss.webRoot;
283 "${wallabag.apache.webappName}" = wallabag.webRoot;
284 "${yourls.apache.webappName}" = yourls.webRoot;
4288c2f2
IB
285 "${kanboard.apache.webappName}" = kanboard.webRoot;
286 };
a95ab089 287
29f8cb85 288 services.websites.env.tools.watchPaths = [
9247b444 289 "/var/secrets/webapps/tools-shaarli"
17f6eae9
IB
290 ];
291 services.filesWatcher.phpfpm-wallabag = {
292 restart = true;
293 paths = [ "/var/secrets/webapps/tools-wallabag" ];
294 };
10889174
IB
295 };
296}
297