diff --git a/public/svgs/librechat.svg b/public/svgs/librechat.svg new file mode 100644 index 000000000..36a536d65 --- /dev/null +++ b/public/svgs/librechat.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/librechat.yaml b/templates/compose/librechat.yaml new file mode 100644 index 000000000..e5647bb2d --- /dev/null +++ b/templates/compose/librechat.yaml @@ -0,0 +1,157 @@ +# documentation: https://docs.librechat.ai/install/configuration/dotenv.html +# slogan: Self-hosted, powerful, and privacy-focused chat UI for multiple AI models +# tags: ai,chat,gpt,claude,palm,openai,azure,huggingface,anthropic,ollama,llm +# logo: svgs/librechat.svg +# port: 3080 + +services: + librechat: + image: ghcr.io/danny-avila/librechat-dev-api:latest + depends_on: + mongodb: + condition: service_healthy + rag_api: + condition: service_healthy + environment: + - HOST=0.0.0.0 + - PORT=3080 + - SERVICE_FQDN_LIBRECHAT_3080 + # MongoDB settings + - MONGO_URI=mongodb://${SERVICE_USER_MONGO}:${SERVICE_PASSWORD_MONGO}@mongodb:27017/librechat?authSource=admin + # Meilisearch settings + - MEILI_HOST=http://meilisearch:7700 + - MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILI} + # RAG settings + - RAG_PORT=8000 + - RAG_API_URL=http://rag_api:8000 + # Auth settings + - DOMAIN_CLIENT=${SERVICE_FQDN_LIBRECHAT} + - DOMAIN_SERVER=${SERVICE_FQDN_LIBRECHAT} + - JWT_SECRET=${SERVICE_PASSWORD_JWT} + - JWT_REFRESH_SECRET=${SERVICE_PASSWORD_64_JWT} + # App settings + - APP_TITLE=${APP_TITLE:-LibreChat} + - ALLOW_EMAIL_LOGIN=${ALLOW_EMAIL_LOGIN:-true} + - ALLOW_REGISTRATION=${ALLOW_REGISTRATION:-true} + - ALLOW_SOCIAL_LOGIN=${ALLOW_SOCIAL_LOGIN:-false} + - ALLOW_SOCIAL_REGISTRATION=${ALLOW_SOCIAL_REGISTRATION:-false} + - ALLOW_PASSWORD_RESET=${ALLOW_PASSWORD_RESET:-false} + - ALLOW_UNVERIFIED_EMAIL_LOGIN=${ALLOW_UNVERIFIED_EMAIL_LOGIN:-true} + # Encryption settings + - CREDS_KEY=${SERVICE_PASSWORD_64_CREDS} + - CREDS_IV=${SERVICE_PASSWORD_CREDS} + # API Keys + - ANTHROPIC_API_KEY=${SERVICE_ANTHROPIC_API_KEY:-user_provided} + - GOOGLE_KEY=${SERVICE_GOOGLE_API_KEY:-user_provided} + - OPENAI_API_KEY=${SERVICE_OPENAI_API_KEY:-user_provided} + - ASSISTANTS_API_KEY=${SERVICE_ASSISTANTS_API_KEY:-user_provided} + # Debug settings + - DEBUG_LOGGING=${DEBUG_LOGGING:-false} + - DEBUG_OPENAI=${DEBUG_OPENAI:-false} + - DEBUG_PLUGINS=${DEBUG_OPENAI:-false} + - NO_INDEX=${NO_INDEX:-true} + healthcheck: + test: + [ + 'CMD', + 'wget', + '--no-verbose', + '--tries=1', + '--spider', + 'http://127.0.0.1:3080/api/health', + ] + interval: 5s + timeout: 10s + retries: 3 + volumes: + - librechat-images:/app/client/public/images + - librechat-logs:/app/api/logs + - librechat-uploads:/app/uploads + - type: bind + source: ./librechat.yaml + target: /app/librechat.yaml + content: | + # For more information, see the Configuration Guide: + # https://www.librechat.ai/docs/configuration/librechat_yaml + + # Configuration version (required) + version: 1.2.8 + + mongodb: + environment: + - MONGO_INITDB_ROOT_USERNAME=${SERVICE_USER_MONGO} + - MONGO_INITDB_ROOT_PASSWORD=${SERVICE_PASSWORD_MONGO} + image: mongo:8 + volumes: + - mongodb-data:/data/db + healthcheck: + test: + [ + 'CMD', + 'mongosh', + '--eval', + "db.runCommand('ping').ok", + '127.0.0.1:27017/test', + '--quiet', + ] + interval: 5s + timeout: 10s + retries: 3 + + meilisearch: + image: getmeili/meilisearch:v1.12.3 + environment: + - MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILI} + - MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-false} + - MEILI_ENV=production + - MEILI_HOST=http://meilisearch:7700 + volumes: + - meilisearch-data:/meili_data + healthcheck: + test: ['CMD', 'curl', '-f', 'http://127.0.0.1:7700/health'] + interval: 2s + timeout: 10s + retries: 15 + + vectordb: + image: ankane/pgvector:latest + environment: + - POSTGRES_DB=rag + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_HOST_AUTH_METHOD=trust + volumes: + - vectordb-data:/var/lib/postgresql/data + healthcheck: + test: + - CMD + - pg_isready + - '--username=$SERVICE_USER_POSTGRES' + - '--host=127.0.0.1' + - '--port=5432' + - '--dbname=rag' + interval: 2s + timeout: 1m + retries: 5 + start_period: 10s + + rag_api: + image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest + depends_on: + vectordb: + condition: service_healthy + environment: + - POSTGRES_DB=rag + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - DB_HOST=vectordb + - DB_USER=${SERVICE_USER_POSTGRES} + - DB_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - DB_NAME=rag + - RAG_PORT=8000 + - RAG_OPENAI_API_KEY=${SERVICE_OPENAI_API_KEY:-user_provided} + healthcheck: + test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health')"] + interval: 5s + timeout: 10s + retries: 10