{ config, lib, pkgs, ... }: let serviceName = "librechat-dev"; portUtils = import ../../../../lib/port-utils.nix {inherit lib;}; servicePort = portUtils.getPort serviceName "AZ-CLD-1"; ragApiDevPort = portUtils.getPort "rag-api-dev" "AZ-CLD-1"; envFileDev = config.age.secrets.librechat-env-dev.path; in { virtualisation.oci-containers = { containers.meilisearch-dev = { image = "getmeili/meilisearch:v1.12.3"; autoStart = false; volumes = ["librechat_dev_meili:/meili_data"]; environment = { MEILI_HTTP_ADDR = "0.0.0.0:7700"; MEILI_NO_ANALYTICS = "true"; }; environmentFiles = [envFileDev]; extraOptions = ["--ip=10.89.1.20" "--network=web-dev"]; }; containers.rag_api-dev = { image = "ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest"; autoStart = false; environment = { RAG_PORT = "8000"; DB_HOST = "10.89.1.1"; DB_PORT = "5432"; }; environmentFiles = [envFileDev]; dependsOn = ["meilisearch-dev"]; extraOptions = ["--add-host=postgres:10.89.1.1" "--ip=10.89.1.21" "--network=web-dev"]; ports = ["127.0.0.1:${toString ragApiDevPort}:8000"]; }; containers.mongodb-dev = { image = "mongo:7"; autoStart = false; volumes = [ "librechat_dev_mongo:/data/db" "/var/backup/mongodb-dev:/data/backups" ]; extraOptions = ["--ip=10.89.1.22" "--network=web-dev"]; }; containers.${serviceName} = { image = "ghcr.io/danny-avila/librechat-dev-api:latest"; autoStart = false; ports = ["127.0.0.1:${toString servicePort}:3080"]; dependsOn = ["mongodb-dev" "rag_api-dev" "meilisearch-dev"]; environment = { HOST = "0.0.0.0"; NODE_ENV = "development"; MONGO_URI = "mongodb://mongodb-dev:27017/LibreChatDev"; MEILI_HOST = "http://meilisearch-dev:7700"; RAG_PORT = "8000"; RAG_API_URL = "http://rag_api-dev:8000"; }; environmentFiles = [envFileDev]; volumes = [ "/var/lib/librechat-dev/librechat.yaml:/app/librechat.yaml:ro" "librechat_dev_images:/app/client/public/images" "librechat_dev_uploads:/app/uploads" "librechat_dev_logs:/app/api/logs" ]; extraOptions = ["--ip=10.89.1.23" "--network=web-dev"]; }; }; # Traefik configuration services.traefik.dynamicConfigOptions.http = { services.${serviceName}.loadBalancer.servers = [ { url = "http://localhost:${toString servicePort}/"; } ]; routers.${serviceName} = { rule = "Host(`chat-dev.az-gruppe.com`)"; tls = { certResolver = "ionos"; }; service = serviceName; entrypoints = "websecure"; }; }; environment.systemPackages = [ (pkgs.writeShellScriptBin "librechat-dev" '' #!/usr/bin/env bash set -e SERVICES=( podman-meilisearch-dev podman-mongodb-dev podman-rag_api-dev podman-librechat-dev ) case "$1" in up) echo "🚀 Starte LibreChat-Dev-Umgebung..." for svc in "''${SERVICES[@]}"; do sudo systemctl start "$svc" done ;; down) echo "🛑 Stoppe LibreChat-Dev-Umgebung..." for svc in "''${SERVICES[@]}"; do sudo systemctl stop "$svc" done ;; restart) echo "🔄 Neustart der LibreChat-Dev-Umgebung..." for svc in "''${SERVICES[@]}"; do sudo systemctl restart "$svc" done ;; status) systemctl status "''${SERVICES[@]}" ;; *) echo "Usage: librechat-dev {up|down|restart|status}" exit 1 ;; esac '') ]; }