From 7e812001f084783323aad1998b5c42ad12f1e8be Mon Sep 17 00:00:00 2001 From: Zuckerberg Date: Fri, 9 Feb 2024 19:56:50 -0700 Subject: [PATCH] Add librechat --- common/server/default.nix | 1 + common/server/librechat.nix | 62 +++++++++++++++++++++++++++++++++ machines/ponyo/default.nix | 4 +++ machines/ponyo/properties.nix | 1 + secrets/librechat-env-file.age | Bin 0 -> 4034 bytes secrets/secrets.nix | 3 ++ 6 files changed, 71 insertions(+) create mode 100644 common/server/librechat.nix create mode 100644 secrets/librechat-env-file.age diff --git a/common/server/default.nix b/common/server/default.nix index 9c84c5b..9b3bd04 100644 --- a/common/server/default.nix +++ b/common/server/default.nix @@ -20,5 +20,6 @@ ./searx.nix ./gitea-actions-runner.nix ./dashy.nix + ./librechat.nix ]; } diff --git a/common/server/librechat.nix b/common/server/librechat.nix new file mode 100644 index 0000000..226c38a --- /dev/null +++ b/common/server/librechat.nix @@ -0,0 +1,62 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.librechat; +in +{ + options.services.librechat = { + enable = mkEnableOption "librechat"; + port = mkOption { + type = types.int; + default = 3080; + }; + host = lib.mkOption { + type = lib.types.str; + example = "example.com"; + }; + }; + + config = mkIf cfg.enable { + virtualisation.oci-containers.containers = { + librechat = { + image = "ghcr.io/danny-avila/librechat:v0.6.6"; + environment = { + HOST = "0.0.0.0"; + MONGO_URI = "mongodb://host.containers.internal:27017/LibreChat"; + ENDPOINTS = "openAI,google,bingAI,gptPlugins"; + }; + environmentFiles = [ + "/run/agenix/librechat-env-file" + ]; + ports = [ + "${toString cfg.port}:3080" + ]; + }; + }; + age.secrets.librechat-env-file.file = ../../secrets/librechat-env-file.age; + + services.mongodb.enable = true; + services.mongodb.bind_ip = "0.0.0.0"; + + # easier podman maintenance + virtualisation.oci-containers.backend = "podman"; + virtualisation.podman.dockerSocket.enable = true; + virtualisation.podman.dockerCompat = true; + + # For mongodb access + networking.firewall.trustedInterfaces = [ + "podman0" # for librechat + ]; + + services.nginx.virtualHosts.${cfg.host} = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://localhost:${toString cfg.port}"; + proxyWebsockets = true; + }; + }; + }; +} diff --git a/machines/ponyo/default.nix b/machines/ponyo/default.nix index 4478083..9b340a6 100644 --- a/machines/ponyo/default.nix +++ b/machines/ponyo/default.nix @@ -151,4 +151,8 @@ # owncast live streaming services.owncast.enable = true; services.owncast.hostname = "live.neet.dev"; + + # librechat + services.librechat.enable = true; + services.librechat.host = "chat.neet.dev"; } diff --git a/machines/ponyo/properties.nix b/machines/ponyo/properties.nix index 23d47cb..1695957 100644 --- a/machines/ponyo/properties.nix +++ b/machines/ponyo/properties.nix @@ -15,6 +15,7 @@ "nextcloud" "dailybot" "gitea" + "librechat" ]; hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMBBlTAIp38RhErU1wNNV5MBeb+WGH0mhF/dxh5RsAXN"; diff --git a/secrets/librechat-env-file.age b/secrets/librechat-env-file.age new file mode 100644 index 0000000000000000000000000000000000000000..b7877b6bcfbc7d74a2a9184a663acc3f77442879 GIT binary patch literal 4034 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