]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - nixops/modules/websites/tools/tools/default.nix
Move etherpad mastodon mediagoblin task and peertube to new secrets
[perso/Immae/Config/Nix.git] / nixops / modules / websites / tools / tools / default.nix
CommitLineData
9d90e7e2 1{ lib, pkgs, config, myconfig, mylibs, ... }:
10889174
IB
2let
3 adminer = pkgs.callPackage ../../commons/adminer.nix {};
bfe3c9c9
IB
4 ympd = pkgs.callPackage ./ympd.nix {
5 env = myconfig.env.tools.ympd;
6 };
9d90e7e2
IB
7 ttrss = pkgs.callPackage ./ttrss.nix {
8 inherit (mylibs) fetchedGithub fetchedGit;
9 env = myconfig.env.tools.ttrss;
10 };
8a2ccf84
IB
11 roundcubemail = pkgs.callPackage ./roundcubemail.nix {
12 inherit (mylibs) fetchedGithub;
13 env = myconfig.env.tools.roundcubemail;
14 };
46f30ecc 15 rainloop = pkgs.callPackage ./rainloop.nix {};
d4ed0eff
IB
16 kanboard = pkgs.callPackage ./kanboard.nix {
17 inherit (mylibs) fetchedGithub;
18 env = myconfig.env.tools.kanboard;
19 };
9d90e7e2 20 wallabag = pkgs.callPackage ./wallabag.nix { env = myconfig.env.tools.wallabag; };
133ebaee
IB
21 yourls = pkgs.callPackage ./yourls.nix {
22 inherit (mylibs) fetchedGithub;
23 env = myconfig.env.tools.yourls;
24 };
bfe3c9c9
IB
25 rompr = pkgs.callPackage ./rompr.nix {
26 inherit (mylibs) fetchedGithub;
27 env = myconfig.env.tools.rompr;
28 };
95b20e17
IB
29 shaarli = pkgs.callPackage ./shaarli.nix {
30 env = myconfig.env.tools.shaarli;
31 };
b892dcbe
IB
32 dokuwiki = pkgs.callPackage ./dokuwiki.nix {
33 inherit (mylibs) fetchedGithub;
34 };
f80772dc
IB
35 ldap = pkgs.callPackage ./ldap.nix {
36 env = myconfig.env.tools.phpldapadmin;
37 };
10889174
IB
38
39 cfg = config.services.myWebsites.tools.tools;
40in {
41 options.services.myWebsites.tools.tools = {
42 enable = lib.mkEnableOption "enable tools website";
43 };
44
45 config = lib.mkIf cfg.enable {
46 security.acme.certs."eldiron".extraDomains."tools.immae.eu" = null;
46f30ecc
IB
47 security.acme.certs."eldiron".extraDomains."devtools.immae.eu" = null;
48
a840a21c
IB
49 deployment.keys =
50 kanboard.keys
51 // ldap.keys
52 // roundcubemail.keys
5f08b34c 53 // shaarli.keys
a840a21c
IB
54 // ttrss.keys
55 // wallabag.keys
56 // yourls.keys;
98163486 57
46f30ecc
IB
58 services.myWebsites.integration.modules =
59 rainloop.apache.modules;
10889174
IB
60
61 services.myWebsites.tools.modules =
1922655a
IB
62 [ "proxy_fcgi" ]
63 ++ adminer.apache.modules
10889174
IB
64 ++ ympd.apache.modules
65 ++ ttrss.apache.modules
aebd817b 66 ++ roundcubemail.apache.modules
133ebaee 67 ++ wallabag.apache.modules
bfe3c9c9 68 ++ yourls.apache.modules
95b20e17 69 ++ rompr.apache.modules
b892dcbe 70 ++ shaarli.apache.modules
f80772dc 71 ++ dokuwiki.apache.modules
d4ed0eff
IB
72 ++ ldap.apache.modules
73 ++ kanboard.apache.modules;
10889174 74
914dd76c
IB
75 systemd.services.ympd = {
76 description = "Standalone MPD Web GUI written in C";
77 wantedBy = [ "multi-user.target" ];
78 script = ''
742697c9 79 export MPD_PASSWORD=$(cat /var/secrets/mpd)
914dd76c
IB
80 ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody
81 '';
82 };
10889174 83
46f30ecc
IB
84 services.myWebsites.integration.vhostConfs.devtools = {
85 certName = "eldiron";
86 hosts = ["devtools.immae.eu" ];
0aae0181 87 root = "/var/lib/ftp/devtools.immae.eu";
46f30ecc 88 extraConfig = [
0aae0181
IB
89 ''
90 <Directory "/var/lib/ftp/devtools.immae.eu">
91 DirectoryIndex index.php index.htm index.html
92 AllowOverride all
93 Require all granted
94 <FilesMatch "\.php$">
95 SetHandler "proxy:unix:/var/run/phpfpm/devtools.sock|fcgi://localhost"
96 </FilesMatch>
97 </Directory>
98 ''
46f30ecc
IB
99 rainloop.apache.vhostConf
100 ];
101 };
102
10889174
IB
103 services.myWebsites.tools.vhostConfs.tools = {
104 certName = "eldiron";
105 hosts = ["tools.immae.eu" ];
1922655a 106 root = "/var/lib/ftp/tools.immae.eu";
10889174 107 extraConfig = [
1922655a
IB
108 ''
109 <Directory "/var/lib/ftp/tools.immae.eu">
0eaac6ba 110 DirectoryIndex index.php index.htm index.html
1922655a
IB
111 AllowOverride all
112 Require all granted
113 <FilesMatch "\.php$">
114 SetHandler "proxy:unix:/var/run/phpfpm/tools.sock|fcgi://localhost"
115 </FilesMatch>
116 </Directory>
117 ''
10889174
IB
118 adminer.apache.vhostConf
119 ympd.apache.vhostConf
120 ttrss.apache.vhostConf
121 roundcubemail.apache.vhostConf
aebd817b 122 wallabag.apache.vhostConf
133ebaee 123 yourls.apache.vhostConf
bfe3c9c9 124 rompr.apache.vhostConf
95b20e17 125 shaarli.apache.vhostConf
b892dcbe 126 dokuwiki.apache.vhostConf
f80772dc 127 ldap.apache.vhostConf
d4ed0eff 128 kanboard.apache.vhostConf
10889174
IB
129 ];
130 };
131
70606070
IB
132 security.acme.certs."eldiron".extraDomains."outils.immae.eu" = null;
133 services.myWebsites.tools.vhostConfs.outils = {
134 certName = "eldiron";
135 hosts = [ "outils.immae.eu" ];
136 root = null;
137 extraConfig = [
138 ''
139 RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1
140
141 RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1
142
143 RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1
144 RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1
145
146 RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1
147 RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1
148 RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1
149 RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1
150
151 RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1
152
153 RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1
154 ''
155 ];
156 };
157
a840a21c
IB
158 services.myPhpfpm.serviceDependencies = {
159 dokuwiki = dokuwiki.phpFpm.serviceDeps;
160 kanboard = kanboard.phpFpm.serviceDeps;
161 ldap = ldap.phpFpm.serviceDeps;
162 rainloop = rainloop.phpFpm.serviceDeps;
163 roundcubemail = roundcubemail.phpFpm.serviceDeps;
5f08b34c 164 shaarli = shaarli.phpFpm.serviceDeps;
a840a21c
IB
165 ttrss = ttrss.phpFpm.serviceDeps;
166 wallabag = wallabag.phpFpm.serviceDeps;
167 yourls = yourls.phpFpm.serviceDeps;
168 };
169
b7d2d4e3 170 services.myPhpfpm.poolPhpConfigs = {
0aae0181
IB
171 devtools = ''
172 extension=${pkgs.phpPackages.redis}/lib/php/extensions/redis.so
173 extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
174 zend_extension=${pkgs.php}/lib/php/extensions/opcache.so
175 '';
b7d2d4e3
IB
176 roundcubemail = roundcubemail.phpFpm.phpConfig;
177 };
8eded9ec
IB
178 services.myPhpfpm.preStart = {
179 wallabag = wallabag.phpFpm.preStart;
180 };
10889174
IB
181 services.myPhpfpm.poolConfigs = {
182 adminer = adminer.phpFpm.pool;
183 ttrss = ttrss.phpFpm.pool;
184 roundcubemail = roundcubemail.phpFpm.pool;
aebd817b 185 wallabag = wallabag.phpFpm.pool;
133ebaee 186 yourls = yourls.phpFpm.pool;
bfe3c9c9 187 rompr = rompr.phpFpm.pool;
95b20e17 188 shaarli = shaarli.phpFpm.pool;
b892dcbe 189 dokuwiki = dokuwiki.phpFpm.pool;
f80772dc 190 ldap = ldap.phpFpm.pool;
46f30ecc 191 rainloop = rainloop.phpFpm.pool;
d4ed0eff 192 kanboard = kanboard.phpFpm.pool;
0aae0181
IB
193 devtools = ''
194 listen = /var/run/phpfpm/devtools.sock
195 user = wwwrun
196 group = wwwrun
197 listen.owner = wwwrun
198 listen.group = wwwrun
199 pm = dynamic
200 pm.max_children = 60
201 pm.start_servers = 2
202 pm.min_spare_servers = 1
203 pm.max_spare_servers = 10
204
205 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/devtools.immae.eu:/tmp"
206 '';
1922655a
IB
207 tools = ''
208 listen = /var/run/phpfpm/tools.sock
209 user = wwwrun
210 group = wwwrun
211 listen.owner = wwwrun
212 listen.group = wwwrun
213 pm = dynamic
214 pm.max_children = 60
215 pm.start_servers = 2
216 pm.min_spare_servers = 1
217 pm.max_spare_servers = 10
218
219 ; Needed to avoid clashes in browser cookies (same domain)
220 php_value[session.name] = ToolsPHPSESSID
221 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/tools.immae.eu:/tmp"
222 '';
10889174
IB
223 };
224
225 system.activationScripts = {
226 ttrss = ttrss.activationScript;
227 roundcubemail = roundcubemail.activationScript;
aebd817b 228 wallabag = wallabag.activationScript;
133ebaee 229 yourls = yourls.activationScript;
bfe3c9c9 230 rompr = rompr.activationScript;
95b20e17 231 shaarli = shaarli.activationScript;
b892dcbe 232 dokuwiki = dokuwiki.activationScript;
46f30ecc 233 rainloop = rainloop.activationScript;
d4ed0eff 234 kanboard = kanboard.activationScript;
10889174
IB
235 };
236
a95ab089
IB
237 system.extraSystemBuilderCmds = ''
238 mkdir -p $out/webapps
239 ln -s ${dokuwiki.webRoot} $out/webapps/${dokuwiki.apache.webappName}
240 ln -s ${ldap.webRoot}/htdocs $out/webapps/${ldap.apache.webappName}
241 ln -s ${rompr.webRoot} $out/webapps/${rompr.apache.webappName}
242 ln -s ${roundcubemail.webRoot} $out/webapps/${roundcubemail.apache.webappName}
243 ln -s ${shaarli.webRoot} $out/webapps/${shaarli.apache.webappName}
244 ln -s ${ttrss.webRoot} $out/webapps/${ttrss.apache.webappName}
245 ln -s ${wallabag.webRoot} $out/webapps/${wallabag.apache.webappName}
246 ln -s ${yourls.webRoot} $out/webapps/${yourls.apache.webappName}
46f30ecc 247 ln -s ${rainloop.webRoot} $out/webapps/${rainloop.apache.webappName}
d4ed0eff 248 ln -s ${kanboard.webRoot} $out/webapps/${kanboard.apache.webappName}
a95ab089
IB
249 '';
250
2368a4b7 251 nixpkgs.overlays = [ (self: super: rec {
914dd76c
IB
252 ympd = super.ympd.overrideAttrs(old: mylibs.fetchedGithub ./ympd.json // {
253 patches = (old.patches or []) ++ [ ./ympd-password-env.patch ];
254 });
2368a4b7 255 }) ];
e229e6f2 256
10889174
IB
257 systemd.services.tt-rss = {
258 description = "Tiny Tiny RSS feeds update daemon";
259 serviceConfig = {
260 User = "wwwrun";
261 ExecStart = "${pkgs.php}/bin/php ${ttrss.webRoot}/update.php --daemon";
262 StandardOutput = "syslog";
263 StandardError = "syslog";
264 PermissionsStartOnly = true;
265 };
266
267 wantedBy = [ "multi-user.target" ];
268 requires = ["postgresql.service"];
269 after = ["network.target" "postgresql.service"];
270 };
271
272 };
273}
274