]> Git — Sourcephile - sourcephile-nix.git/blob - hosts/mermet/calibre.nix
calibre: increase `client_max_body_size`
[sourcephile-nix.git] / hosts / mermet / calibre.nix
1 {
2 pkgs,
3 lib,
4 config,
5 ...
6 }:
7 with lib;
8 let
9 domain = "sourcephile.fr";
10 srv = "calibre";
11 calibre = config.services.calibre-server;
12 stateDir = "/var/lib/calibre";
13 in
14 {
15 # Beware, calibre pulls a lot of dependencies..
16 # TODO: The calibre server also supports systemd socket activation
17 services.calibre-server = {
18 enable = true;
19 host = "127.0.0.1";
20 port = 17429;
21 libraries = [
22 "${stateDir}/libraries/julm"
23 ];
24 # sudo -u calibre-server calibre-server --userdb /var/lib/calibre/users.sqlite --manage-users
25 auth = {
26 enable = true;
27 mode = "basic";
28 userDb = "${stateDir}/users.sqlite";
29 };
30 };
31 systemd.services.calibre-server = {
32 unitConfig = {
33 StartLimitBurst = 5;
34 StartLimitIntervalSec = "600s";
35 };
36 serviceConfig = {
37 ExecStart = mkForce (
38 escapeShellArgs (
39 [
40 "${pkgs.calibre}/bin/calibre-server"
41 "--disable-use-bonjour"
42 "--listen-on"
43 calibre.host
44 "--port"
45 (toString calibre.port)
46 ]
47 ++ lib.optionals calibre.auth.enable [
48 "--enable-auth"
49 "--auth-mode"
50 calibre.auth.mode
51 "--userdb"
52 calibre.auth.userDb
53 ]
54 ++ calibre.libraries
55 )
56 );
57 MemoryAccounting = true;
58 MemoryHigh = "350M";
59 MemoryMax = "450M";
60 Restart = mkForce "on-failure";
61 RestartSec = "60s";
62 };
63 };
64 users.users.calibre-server.home = mkForce stateDir;
65 services.nginx = {
66 enable = true;
67 upstreams.${srv} = {
68 servers."${calibre.host}:${toString calibre.port}" = {
69 max_fails = 5;
70 fail_timeout = "60s";
71 };
72 extraConfig = '''';
73 };
74 virtualHosts."${srv}.${domain}" = {
75 forceSSL = true;
76 useACMEHost = domain;
77 extraConfig = ''
78 access_log /var/log/nginx/${domain}/${srv}/access.log json buffer=32k;
79 error_log /var/log/nginx/${domain}/${srv}/error.log;
80 '';
81 locations."/" = {
82 proxyPass = "http://${srv}";
83 extraConfig = ''
84 client_max_body_size 256m;
85 '';
86 };
87 };
88 };
89 systemd.services.nginx = {
90 serviceConfig = {
91 LogsDirectory = lib.mkForce [ "nginx/${domain}/${srv}" ];
92 };
93 };
94 services.sanoid.datasets."rpool/var/lib/${srv}" = {
95 use_template = [ "snap" ];
96 daily = 31;
97 monthly = 3;
98 recursive = true;
99 };
100 }