2025-07-21 20:14:35 +00:00
|
|
|
{ pkgs, lib, config, ... }:
|
|
|
|
|
with lib;
|
|
|
|
|
{
|
|
|
|
|
options.myModules.librechat.enable = mkEnableOption "custom librechat configuration";
|
|
|
|
|
|
|
|
|
|
config = mkIf config.myModules.librechat.enable {
|
|
|
|
|
environment.systemPackages = [
|
2025-07-21 23:51:23 +00:00
|
|
|
pkgs.librechat
|
2025-07-22 16:44:40 +00:00
|
|
|
pkgs.meilisearch
|
2025-07-21 20:14:35 +00:00
|
|
|
];
|
|
|
|
|
services.caddy.virtualHosts."ai.gleipnir.technology".extraConfig = ''
|
|
|
|
|
reverse_proxy http://localhost:10050
|
|
|
|
|
'';
|
|
|
|
|
services.mongodb = {
|
|
|
|
|
enable = true;
|
|
|
|
|
};
|
|
|
|
|
sops.secrets.librechat-env = {
|
|
|
|
|
format = "dotenv";
|
|
|
|
|
group = "librechat";
|
|
|
|
|
mode = "0440";
|
|
|
|
|
owner = "librechat";
|
2025-07-21 20:31:14 +00:00
|
|
|
restartUnits = ["librechat.service"];
|
2025-07-21 20:14:35 +00:00
|
|
|
sopsFile = ../../secrets/librechat.env;
|
|
|
|
|
};
|
2025-07-22 16:44:40 +00:00
|
|
|
sops.secrets.meilisearch-env = {
|
|
|
|
|
format = "dotenv";
|
|
|
|
|
group = "meilisearch";
|
|
|
|
|
mode = "0440";
|
|
|
|
|
owner = "meilisearch";
|
|
|
|
|
restartUnits = ["meilisearch.service"];
|
|
|
|
|
sopsFile = ../../secrets/meilisearch.env;
|
|
|
|
|
};
|
2025-07-21 20:14:35 +00:00
|
|
|
systemd.services.librechat = {
|
|
|
|
|
after=["network.target" "network-online.target"];
|
|
|
|
|
description="Self-hosted LLM chat frontend";
|
|
|
|
|
documentation=["https://www.librechat.ai/docs"];
|
|
|
|
|
requires=["network-online.target"];
|
|
|
|
|
serviceConfig = {
|
|
|
|
|
EnvironmentFile="/var/run/secrets/librechat-env";
|
|
|
|
|
Type = "simple";
|
|
|
|
|
User = "librechat";
|
|
|
|
|
Group = "librechat";
|
|
|
|
|
ExecStart = "${pkgs.librechat}/bin/librechat-server";
|
|
|
|
|
TimeoutStopSec = "5s";
|
|
|
|
|
PrivateTmp = true;
|
|
|
|
|
WorkingDirectory = "/opt/librechat";
|
|
|
|
|
};
|
|
|
|
|
wantedBy = ["multi-user.target"];
|
|
|
|
|
};
|
2025-07-22 16:44:40 +00:00
|
|
|
systemd.services.meilisearch = {
|
|
|
|
|
after=["network.target" "network-online.target"];
|
|
|
|
|
description="Self-hosted LLM chat search";
|
|
|
|
|
documentation=["https://www.meilisearch.com/docs/learn/self_hosted/configure_meilisearch_at_launch"];
|
|
|
|
|
requires=["network-online.target"];
|
|
|
|
|
serviceConfig = {
|
|
|
|
|
EnvironmentFile="/var/run/secrets/meilisearch-env";
|
|
|
|
|
Type = "simple";
|
|
|
|
|
User = "meilisearch";
|
|
|
|
|
Group = "meilisearch";
|
|
|
|
|
ExecStart = "${pkgs.meilisearch}/bin/meilisearch";
|
|
|
|
|
TimeoutStopSec = "5s";
|
|
|
|
|
PrivateTmp = true;
|
|
|
|
|
WorkingDirectory = "/opt/meilisearch";
|
|
|
|
|
};
|
|
|
|
|
wantedBy = ["multi-user.target"];
|
|
|
|
|
};
|
2025-07-21 20:14:35 +00:00
|
|
|
systemd.tmpfiles.rules = [
|
|
|
|
|
"d /opt/librechat 0755 librechat librechat"
|
2025-07-22 16:44:40 +00:00
|
|
|
"d /opt/meilisearch 0755 meilisearch meilisearch"
|
2025-07-21 20:14:35 +00:00
|
|
|
];
|
|
|
|
|
users.groups.librechat = {};
|
2025-07-22 16:44:40 +00:00
|
|
|
users.groups.meilisearch = {};
|
2025-07-21 20:14:35 +00:00
|
|
|
users.users.librechat = {
|
|
|
|
|
group = "librechat";
|
2025-07-22 16:44:40 +00:00
|
|
|
isSystemUser = true;
|
|
|
|
|
};
|
|
|
|
|
users.users.meilisearch = {
|
|
|
|
|
group = "meilisearch";
|
2025-07-21 20:14:35 +00:00
|
|
|
isSystemUser = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
}
|