From 1e21b7e785b5a2e1b5a604df57cd23d31a0d3955 Mon Sep 17 00:00:00 2001 From: Sunil Shrestha Date: Sun, 2 Nov 2025 00:15:12 +0545 Subject: [PATCH 1/8] feat(librechat): add LibreChat blueprint with compose, toml, metadata, links and tags --- blueprints/librechat/docker-compose.yml | 109 ++++++++++++++++++++++ blueprints/librechat/librechat.png | Bin 0 -> 59599 bytes blueprints/librechat/templates.toml | 117 ++++++++++++++++++++++++ meta.json | 20 ++++ 4 files changed, 246 insertions(+) create mode 100644 blueprints/librechat/docker-compose.yml create mode 100644 blueprints/librechat/librechat.png create mode 100644 blueprints/librechat/templates.toml diff --git a/blueprints/librechat/docker-compose.yml b/blueprints/librechat/docker-compose.yml new file mode 100644 index 00000000..d6ed9323 --- /dev/null +++ b/blueprints/librechat/docker-compose.yml @@ -0,0 +1,109 @@ +# LibreChat Docker Compose for Dokploy Template + +services: + api: + image: ghcr.io/danny-avila/librechat-dev:latest + restart: always + depends_on: + - mongodb + - rag_api + environment: + # Server Configuration + - HOST=0.0.0.0 + - PORT=${PORT:-3080} + # Domain Configuration + - DOMAIN_CLIENT=${DOMAIN_CLIENT} + - DOMAIN_SERVER=${DOMAIN_SERVER} + # Database and Search Configuration + - MONGO_URI=mongodb://mongodb:27017/LibreChat + - MEILI_HOST=http://meilisearch:7700 + - SEARCH=true + - NO_INDEX=true + - MEILI_NO_ANALYTICS=true + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY} + # Security & Sessions + - JWT_SECRET=${JWT_SECRET} + - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET} + - CREDS_KEY=${CREDS_KEY} + - CREDS_IV=${CREDS_IV} + - RAG_PORT=${RAG_PORT:-8000} + - RAG_API_URL=http://rag_api:${RAG_PORT:-8000} + # API Keys and Secrets + - OPENAI_API_KEY=${OPENAI_API_KEY} + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} + - OPENROUTER_KEY=${OPENROUTER_KEY} + - GOOGLE_KEY=${GOOGLE_KEY} + - ENDPOINTS=google,openAI,assistants,azureOpenAI,anthropic + # ... Additional Endpoints + # UI + - APP_TITLE=${APP_TITLE:-LibreChat} + - CUSTOM_FOOTER=${CUSTOM_FOOTER:-Made with ❤️ by LibreChat} + - ALLOW_EMAIL_LOGIN=${ALLOW_EMAIL_LOGIN:-true} + - ALLOW_SOCIAL_LOGIN=${ALLOW_SOCIAL_LOGIN:-false} + - ALLOW_REGISTRATION=${ALLOW_REGISTRATION:-false} + volumes: + - type: bind + source: ../files/librechat.yaml + target: /app/librechat.yaml + - librechat_data:/app/client/public/images + - librechat_data:/app/uploads + - librechat_data:/app/logs + + mongodb: + image: mongo + restart: always + volumes: + - mongo_data:/data/db + command: mongod --noauth + + meilisearch: + image: getmeili/meilisearch:v1.12.3 + restart: always + environment: + - MEILI_HOST=http://meilisearch:7700 + - MEILI_NO_ANALYTICS=true + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY} + volumes: + - meili_data:/meili_data + + vectordb: + image: pgvector/pgvector:0.8.0-pg15-trixie + environment: + - POSTGRES_DB=${POSTGRES_DB:-mydatabase} + - POSTGRES_USER=${POSTGRES_USER:-myuser} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-mypassword} + restart: always + volumes: + - postgres_data:/var/lib/postgresql/data + + rag_api: + image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest + environment: + - DB_HOST=vectordb + - VECTOR_DB_TYPE=pgvector + - POSTGRES_DB=${POSTGRES_DB:-mydatabase} + - POSTGRES_USER=${POSTGRES_USER:-myuser} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-mypassword} + - RAG_PORT=${RAG_PORT:-8000} + - OPENAI_API_KEY=${OPENAI_API_KEY} + - RAG_OPENAI_API_KEY=${RAG_OPENAI_API_KEY} + - GOOGLE_KEY=${GOOGLE_KEY} + - RAG_GOOGLE_API_KEY=${RAG_GOOGLE_API_KEY} + - JWT_SECRET=${JWT_SECRET} + - COLLECTION_NAME=${COLLECTION_NAME:-librechat_collection} + - CHUNK_SIZE=${CHUNK_SIZE:-1500} + - CHUNK_OVERLAP=${CHUNK_OVERLAP:-100} + - EMBEDDINGS_PROVIDER=${EMBEDDINGS_PROVIDER:-openai} + - EMBEDDINGS_MODEL=${EMBEDDINGS_MODEL:-text-embedding-3-small} + - DEBUG_RAG_API=false + - DEBUG_PGVECTOR_QUERIES=false + - CONSOLE_JSON=false + restart: always + depends_on: + - vectordb + +volumes: + mongo_data: + meili_data: + postgres_data: + librechat_data: \ No newline at end of file diff --git a/blueprints/librechat/librechat.png b/blueprints/librechat/librechat.png new file mode 100644 index 0000000000000000000000000000000000000000..061f9a6b1ca6b71f6980c5e997c5a8bc5d583d42 GIT binary patch literal 59599 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

m;s)r5YB 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 literal 0 HcmV?d00001 diff --git a/blueprints/librechat/templates.toml b/blueprints/librechat/templates.toml new file mode 100644 index 00000000..ee7c2d94 --- /dev/null +++ b/blueprints/librechat/templates.toml @@ -0,0 +1,117 @@ +[variables] +# Domain Configuration +main_domain = "${domain}" + +# Security & Authentication +jwt_secret = "${password:64}" +jwt_refresh_secret = "${password:64}" +creds_key = "f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0" +creds_iv = "e2341419ec3dd3d19b13a1a87fafcbfb" +meili_master_key = "${password:32}" + +# Database Configuration +mongo_password = "${password:16}" +postgresql_password = "${password:16}" + +[config] +# Main service domain mapping +[[config.domains]] +serviceName = "librechat" +port = 3080 +host = "${main_domain}" + +[config.env] +# Basic Configuration +HOST="0.0.0.0" +PORT="3080" +DOMAIN_CLIENT="https://${main_domain}" +DOMAIN_SERVER="https://${main_domain}" + +# Search Configuration +MEILI_MASTER_KEY="${meili_master_key}" + +# Security +JWT_SECRET="${jwt_secret}" +JWT_REFRESH_SECRET="${jwt_refresh_secret}" +CREDS_KEY="${creds_key}" +CREDS_IV="${creds_iv}" + +# API Keys +OPENAI_API_KEY="" +ANTHROPIC_API_KEY="" +GOOGLE_KEY="" +OPENROUTER_KEY="" + +# Database +POSTGRES_DB="librechat_db" +POSTGRES_USER="librechat_user" +POSTGRES_PASSWORD="${postgresql_password}" + +# Security & Sessions +ALLOW_EMAIL_LOGIN="true" +ALLOW_REGISTRATION="false" +ALLOW_SOCIAL_LOGIN="false" + +# User Interface +APP_TITLE="LibreChat" +CUSTOM_FOOTER="Made with ❤️ by LibreChat" +ALLOW_EMAIL_LOGIN="true" +ALLOW_REGISTRATION="false" +ALLOW_SOCIAL_LOGIN="false" + +# RAG +RAG_OPENAI_API_KEY="" +RAG_GOOGLE_API_KEY="" +EMBEDDINGS_PROVIDER="openai" +EMBEDDINGS_MODEL="text-embedding-3-small" + +CHUNK_SIZE=1500 +CHUNK_OVERLAP=100 + + +[config.mounts] +# Persistent data volumes +[[config.mounts]] +volumeName = "mongo_data" +mountPath = "/data/db" +backup = true + +[[config.mounts]] +volumeName = "meili_data" +mountPath = "/meili_data" +backup = true + +[[config.mounts]] +volumeName = "postgres_data" +mountPath = "/var/lib/postgresql/data" +backup = true + +# Application data directories +[[config.mounts]] +volumeName = "librechat_data" +mountPath = "/app" +backup = true + +[[config.mounts]] +filePath = "librechat.yaml" +content = """ +### librechat.yaml configs ### + +version: 1.2.8 +cache: true +endpoints: + custom: + - name: "OpenRouter" + apiKey: "${OPENROUTER_KEY}" + baseURL: "https://openrouter.ai/api/v1" + models: + default: ["meta-llama/llama-3.3-70b-instruct:free"] + fetch: true + titleConvo: true + titleModel: "current_model" + summarize: false + summaryModel: "current_model" + forcePrompt: false + dropParams: ["stop"] + modelDisplayLabel: "OpenRouter" +""" \ No newline at end of file diff --git a/meta.json b/meta.json index 5c7b22cf..7079b4af 100644 --- a/meta.json +++ b/meta.json @@ -3136,6 +3136,26 @@ "productivity" ] }, + { + "id": "librechat", + "name": "LibreChat", + "version": "latest", + "description": "LibreChat is the ultimate open-source app for all your AI conversations, fully customizable and compatible with any AI provider (Openai, Ollama, Google etc.) — all in one sleek interface.", + "logo": "librechat.png", + "links": { + "github": "https://github.com/danny-avila/librechat", + "website": "https://librechat.ai", + "docs": "https://docs.librechat.ai" + }, + "tags": [ + "ai", + "chatbot", + "llm", + "MIT-license", + "BYOK", + "generative-ai" + ] + }, { "id": "libredesk", "name": "Libredesk", From 758cf1d873d45ea0771c109cbcb6101fedc3ba79 Mon Sep 17 00:00:00 2001 From: Sunil Shrestha Date: Sun, 2 Nov 2025 00:19:15 +0545 Subject: [PATCH 2/8] fix: rename templates to template.toml --- blueprints/librechat/{templates.toml => template.toml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename blueprints/librechat/{templates.toml => template.toml} (100%) diff --git a/blueprints/librechat/templates.toml b/blueprints/librechat/template.toml similarity index 100% rename from blueprints/librechat/templates.toml rename to blueprints/librechat/template.toml From 47daea92f862cf2d111d017b6f3e9da176455451 Mon Sep 17 00:00:00 2001 From: Sunil Shrestha Date: Sun, 2 Nov 2025 00:40:02 +0545 Subject: [PATCH 3/8] fix(librechat): rename api service to librechat in docker-compose.yml --- blueprints/librechat/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/librechat/docker-compose.yml b/blueprints/librechat/docker-compose.yml index d6ed9323..aff39f94 100644 --- a/blueprints/librechat/docker-compose.yml +++ b/blueprints/librechat/docker-compose.yml @@ -1,7 +1,7 @@ # LibreChat Docker Compose for Dokploy Template services: - api: + librechat: image: ghcr.io/danny-avila/librechat-dev:latest restart: always depends_on: From 3e8b43103173503b19e93276aa9810f4fa8cba98 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 8 Nov 2025 00:21:23 -0600 Subject: [PATCH 4/8] Update blueprints/librechat/template.toml --- blueprints/librechat/template.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/librechat/template.toml b/blueprints/librechat/template.toml index ee7c2d94..22ab6c3f 100644 --- a/blueprints/librechat/template.toml +++ b/blueprints/librechat/template.toml @@ -48,7 +48,6 @@ POSTGRES_USER="librechat_user" POSTGRES_PASSWORD="${postgresql_password}" # Security & Sessions -ALLOW_EMAIL_LOGIN="true" ALLOW_REGISTRATION="false" ALLOW_SOCIAL_LOGIN="false" From 60796a90847bf27061eaba5491eb02c49400bdf2 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 8 Nov 2025 00:24:36 -0600 Subject: [PATCH 5/8] Update blueprints/librechat/template.toml --- blueprints/librechat/template.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/blueprints/librechat/template.toml b/blueprints/librechat/template.toml index 22ab6c3f..c1884b04 100644 --- a/blueprints/librechat/template.toml +++ b/blueprints/librechat/template.toml @@ -48,8 +48,6 @@ POSTGRES_USER="librechat_user" POSTGRES_PASSWORD="${postgresql_password}" # Security & Sessions -ALLOW_REGISTRATION="false" -ALLOW_SOCIAL_LOGIN="false" # User Interface APP_TITLE="LibreChat" From 1d702943103d80af380e68f9a274d14d2fd90223 Mon Sep 17 00:00:00 2001 From: Sunil Shrestha Date: Mon, 10 Nov 2025 09:19:06 +0545 Subject: [PATCH 6/8] fix(librechat): add version under [config] and remove stray [config.mounts] header --- blueprints/librechat/template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/librechat/template.toml b/blueprints/librechat/template.toml index c1884b04..3c74806c 100644 --- a/blueprints/librechat/template.toml +++ b/blueprints/librechat/template.toml @@ -14,6 +14,7 @@ mongo_password = "${password:16}" postgresql_password = "${password:16}" [config] +version = "1.0.0" # Main service domain mapping [[config.domains]] serviceName = "librechat" @@ -66,7 +67,6 @@ CHUNK_SIZE=1500 CHUNK_OVERLAP=100 -[config.mounts] # Persistent data volumes [[config.mounts]] volumeName = "mongo_data" From 2e1fb3b3a9ea2c277d593ca5891e744b0c01a7f6 Mon Sep 17 00:00:00 2001 From: Sunil Shrestha Date: Mon, 10 Nov 2025 10:25:31 +0545 Subject: [PATCH 7/8] fix(librechat): remove predefined persistent volume mounts from template.toml --- blueprints/librechat/template.toml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/blueprints/librechat/template.toml b/blueprints/librechat/template.toml index 3c74806c..744a1745 100644 --- a/blueprints/librechat/template.toml +++ b/blueprints/librechat/template.toml @@ -67,27 +67,6 @@ CHUNK_SIZE=1500 CHUNK_OVERLAP=100 -# Persistent data volumes -[[config.mounts]] -volumeName = "mongo_data" -mountPath = "/data/db" -backup = true - -[[config.mounts]] -volumeName = "meili_data" -mountPath = "/meili_data" -backup = true - -[[config.mounts]] -volumeName = "postgres_data" -mountPath = "/var/lib/postgresql/data" -backup = true - -# Application data directories -[[config.mounts]] -volumeName = "librechat_data" -mountPath = "/app" -backup = true [[config.mounts]] filePath = "librechat.yaml" From 46dc5b9be3ea8f06d931d709ded142d2f7a216a9 Mon Sep 17 00:00:00 2001 From: Sunil Shrestha Date: Mon, 10 Nov 2025 10:38:02 +0545 Subject: [PATCH 8/8] docs(librechat): add authentication reference link to docker-compose.yml --- blueprints/librechat/docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/blueprints/librechat/docker-compose.yml b/blueprints/librechat/docker-compose.yml index aff39f94..a5a4c5a9 100644 --- a/blueprints/librechat/docker-compose.yml +++ b/blueprints/librechat/docker-compose.yml @@ -1,4 +1,5 @@ # LibreChat Docker Compose for Dokploy Template +# Setting up authentication: "npm run create-user", refer to https://www.librechat.ai/docs/configuration/authentication services: librechat: