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