system/roles/searchix.nix (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | {
config,
inputs,
pkgs,
...
}:
{
imports = [
inputs.searchix.nixosModules.web
../../packages/modules/nixos/goaccess.nix
];
nixpkgs.overlays = [
inputs.searchix.overlays.default
];
services.searchix = {
enable = true;
environment = {
GOMEMLIMIT = "1500MiB";
};
settings = {
web = {
baseURL = "https://searchix.ovh";
searchTimeout = "2s";
};
importer.timeout = "2h";
importer.sources = {
darwin = {
enable = true;
fetcher = "download";
url = "https://alinnow.github.io/nix-options/darwin";
};
home-manager = {
enable = true;
fetcher = "download";
url = "https://alinnow.github.io/nix-options/home-manager";
};
nixpkgs = {
enable = true;
fetcher = "channel-nixpkgs";
channel = "nixos-unstable";
timeout = "1h";
};
nixos = {
enable = true;
fetcher = "channel-nixpkgs";
channel = "nixos-unstable";
};
nur.enable = true;
};
};
};
systemd.services.searchix.serviceConfig = {
MemoryHigh = "1.2G";
MemoryMax = "1.5G";
};
services.caddy.virtualHosts = {
"searchix.ovh" = {
extraConfig = ''
root ${pkgs.searchix}/lib/searchix
handle_errors {
rewrite * /error.html
templates
file_server
}
handle_path /stats/* {
root /srv/http/access/searchix
file_server
}
handle {
reverse_proxy localhost:${toString config.services.searchix.settings.web.port} {
health_uri /health
health_status 2xx
health_interval 10s
health_timeout 1s
health_fails 2
}
}
encode zstd gzip {
match {
header Content-Type text/*
header Content-Type application/json*
header Content-Type application/javascript*
header Content-Type application/opensearchdescription+xml
header Content-Type application/atom+xml*
header Content-Type application/rss+xml*
header Content-Type image/svg+xml*
}
}
'';
};
"searchix.alanpearce.eu" = {
extraConfig = ''
redir https://searchix.ovh{uri} permanent
'';
};
};
services.goaccess = {
group = "caddy";
instances = {
searchix = {
enable = true;
dates = "hourly";
settings = {
log-file = "${config.services.caddy.logDir}/access-searchix.ovh.log";
output = "/srv/http/access/searchix/index.html";
log-format = "caddy";
anonymize-ip = true;
anonymize-level = 2;
persist = true;
restore = true;
keep-last = 90; # days
};
};
};
};
}
|