2023-08-26 12:17:30 +08:00
|
|
|
inputs:
|
|
|
|
{
|
2023-09-01 21:05:26 +08:00
|
|
|
options.nixos.services.meilisearch = let inherit (inputs.lib) mkOption types; in
|
|
|
|
{
|
|
|
|
instances = mkOption
|
|
|
|
{
|
|
|
|
type = types.attrsOf (types.submodule (submoduleInputs: { options =
|
|
|
|
{
|
|
|
|
user = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; };
|
|
|
|
port = mkOption { type = types.ints.unsigned; };
|
|
|
|
};}));
|
|
|
|
default = {};
|
|
|
|
};
|
2023-09-24 20:47:46 +08:00
|
|
|
ioLimitDevice = mkOption { type = types.nullOr types.nonEmptyStr; default = null; };
|
2023-09-01 21:05:26 +08:00
|
|
|
};
|
|
|
|
config =
|
|
|
|
let
|
|
|
|
inherit (inputs.config.nixos.services) meilisearch;
|
|
|
|
inherit (inputs.localLib) stripeTabs attrsToList;
|
2023-12-09 20:01:50 +08:00
|
|
|
inherit (builtins) map listToAttrs concatLists;
|
2023-09-01 21:05:26 +08:00
|
|
|
in
|
|
|
|
{
|
|
|
|
systemd =
|
|
|
|
{
|
|
|
|
services = listToAttrs (map
|
|
|
|
(instance:
|
|
|
|
{
|
|
|
|
name = "meilisearch-${instance.name}";
|
|
|
|
value =
|
|
|
|
{
|
|
|
|
description = "meiliSearch ${instance.name}";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
after = [ "network.target" ];
|
|
|
|
# environment.RUST_BACKTRACE = "full";
|
|
|
|
serviceConfig =
|
|
|
|
{
|
|
|
|
User = instance.value.user;
|
|
|
|
Group = inputs.config.users.users.${instance.value.user}.group;
|
|
|
|
ExecStart =
|
|
|
|
let
|
2023-11-22 11:41:36 +08:00
|
|
|
meilisearch = inputs.pkgs.meilisearch.overrideAttrs (prev:
|
2023-09-01 21:05:26 +08:00
|
|
|
{
|
|
|
|
RUSTFLAGS = prev.RUSTFLAGS or [] ++ [ "-Clto=true" "-Cpanic=abort" "-Cembed-bitcode=yes"]
|
|
|
|
++ (
|
2023-09-02 21:21:29 +08:00
|
|
|
let inherit (inputs.config.nixos.system.nixpkgs) march;
|
2023-09-01 21:05:26 +08:00
|
|
|
in (if march != null then [ "-Ctarget-cpu=${march}" ] else [])
|
|
|
|
);
|
|
|
|
});
|
|
|
|
config = inputs.config.sops.templates."meilisearch-${instance.name}.toml".path;
|
|
|
|
in
|
|
|
|
"${meilisearch}/bin/meilisearch --config-file-path ${config}";
|
|
|
|
Restart = "always";
|
|
|
|
StartLimitBurst = 3;
|
|
|
|
LimitNOFILE = "infinity";
|
|
|
|
LimitNPROC = "infinity";
|
|
|
|
LimitCORE = "infinity";
|
|
|
|
CPUSchedulingPolicy = "idle";
|
|
|
|
IOSchedulingClass = "idle";
|
|
|
|
IOSchedulingPriority = 4;
|
|
|
|
IOAccounting = true;
|
|
|
|
IOWeight = 1;
|
|
|
|
Nice = 19;
|
|
|
|
Slice = "-.slice";
|
2023-09-24 20:47:46 +08:00
|
|
|
}
|
|
|
|
// (if meilisearch.ioLimitDevice != null then
|
|
|
|
{
|
|
|
|
IOReadBandwidthMax = "${meilisearch.ioLimitDevice} 20M";
|
|
|
|
IOWriteBandwidthMax = "${meilisearch.ioLimitDevice} 20M";
|
|
|
|
# iostat -dx 1
|
|
|
|
IOReadIOPSMax = "${meilisearch.ioLimitDevice} 100";
|
|
|
|
IOWriteIOPSMax = "${meilisearch.ioLimitDevice} 100";
|
|
|
|
} else {});
|
2023-09-01 21:05:26 +08:00
|
|
|
};
|
|
|
|
})
|
|
|
|
(attrsToList meilisearch.instances));
|
2023-12-09 20:01:50 +08:00
|
|
|
tmpfiles.rules = concatLists (map
|
2023-09-01 21:05:26 +08:00
|
|
|
(instance:
|
|
|
|
let
|
|
|
|
user = instance.value.user;
|
|
|
|
group = inputs.config.users.users.${instance.value.user}.group;
|
2023-12-15 20:20:30 +08:00
|
|
|
dir = "/var/lib/meilisearch/${instance.name}";
|
2023-09-01 21:05:26 +08:00
|
|
|
in
|
2023-12-15 20:20:30 +08:00
|
|
|
[ "d ${dir} 0700 ${user} ${group}" "Z ${dir} - ${user} ${group}" ])
|
2023-12-09 20:01:50 +08:00
|
|
|
(attrsToList meilisearch.instances));
|
2023-09-01 21:05:26 +08:00
|
|
|
};
|
|
|
|
sops =
|
|
|
|
{
|
|
|
|
templates = listToAttrs (map
|
|
|
|
(instance:
|
|
|
|
{
|
|
|
|
name = "meilisearch-${instance.name}.toml";
|
|
|
|
value =
|
|
|
|
{
|
|
|
|
content =
|
|
|
|
''
|
|
|
|
db_path = "/var/lib/meilisearch/${instance.name}"
|
|
|
|
http_addr = "0.0.0.0:${toString instance.value.port}"
|
|
|
|
master_key = "${inputs.config.sops.placeholder."meilisearch/${instance.name}"}"
|
|
|
|
env = "production"
|
|
|
|
dump_dir = "/var/lib/meilisearch/${instance.name}/dumps"
|
|
|
|
log_level = "INFO"
|
2023-09-20 09:18:45 +08:00
|
|
|
max_indexing_memory = "16Gb"
|
2023-09-01 21:05:26 +08:00
|
|
|
max_indexing_threads = 1
|
|
|
|
'';
|
2023-10-02 22:27:35 +08:00
|
|
|
owner = instance.value.user;
|
2023-09-01 21:05:26 +08:00
|
|
|
};
|
|
|
|
})
|
|
|
|
(attrsToList meilisearch.instances));
|
|
|
|
secrets = listToAttrs (map
|
|
|
|
(instance: { name = "meilisearch/${instance.name}"; value = {}; })
|
|
|
|
(attrsToList meilisearch.instances));
|
|
|
|
};
|
|
|
|
};
|
2023-08-26 12:17:30 +08:00
|
|
|
}
|