diff --git a/blueprints/librechat/docker-compose.yml b/blueprints/librechat/docker-compose.yml new file mode 100644 index 00000000..a5a4c5a9 --- /dev/null +++ b/blueprints/librechat/docker-compose.yml @@ -0,0 +1,110 @@ +# LibreChat Docker Compose for Dokploy Template +# Setting up authentication: "npm run create-user", refer to https://www.librechat.ai/docs/configuration/authentication + +services: + librechat: + 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 00000000..061f9a6b Binary files /dev/null and b/blueprints/librechat/librechat.png differ diff --git a/blueprints/librechat/template.toml b/blueprints/librechat/template.toml new file mode 100644 index 00000000..744a1745 --- /dev/null +++ b/blueprints/librechat/template.toml @@ -0,0 +1,93 @@ +[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] +version = "1.0.0" +# 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 + +# 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]] +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 5cea3110..9c9b173f 100644 --- a/meta.json +++ b/meta.json @@ -3261,6 +3261,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",