환경 변수
`.env` 파일을 사용하여 애플리케이션 환경을 구성하기 위한 종합 가이드입니다. 이 문서는 다양한 상황에서 애플리케이션의 동작을 결정하는 환경 변수를 이해하고 사용자 지정하기 위한 원스톱 리소스입니다.
.env 파일을 사용하여 애플리케이션 환경을 구성하기 위한 종합 가이드에 오신 것을 환영합니다. 이 문서는 다양한 상황에서 애플리케이션의 동작을 결정하는 환경 변수를 이해하고 사용자 지정하기 위한 원스톱 리소스입니다.
기본 설정만으로도 표준 docker 설치를 위한 탄탄한 기반을 제공하지만, 이 가이드를 자세히 살펴보면 LibreChat의 잠재력을 완전히 끌어낼 수 있습니다. 이 가이드를 통해 귀하의 필요에 맞춰 LibreChat을 조정할 수 있습니다. 언어 모델 가용성을 조정하고, 소셜 로그인을 통합하며, 자동 조정 시스템을 관리하는 등 다양한 방법을 알아보세요. 이 모든 것은 최적의 사용자 경험을 위해 LibreChat을 세밀하게 조정할 수 있는 제어 권한을 제공하기 위함입니다.
알림: 구성 변경 사항을 적용하려면 LibreChat을 다시 시작해 주세요.
또는, LibreChat의 메인 docker-compose.yml 파일과 동일한 디렉토리에 docker-compose.override.yml이라는 새 파일을 생성할 수 있습니다. 이 파일에서 environment 아래에 필요한 .env 변수를 설정하거나, 전체 파일을 직접 수정하거나 복제할 필요 없이 메인 docker-compose.yml에서 제공하는 기본 구성을 수정할 수 있습니다.
더 자세한 정보는 다음을 참조하세요:
-
빠른 가이드:
-
공식 Docker 문서:
-
LibreChat 폴더 및 GitHub에서 LibreChat을 위한 오버라이드 파일 예시를 확인할 수도 있습니다:
서버 구성
포트
- 서버는 특정 포트에서 수신 대기합니다.
PORT환경 변수는 서버가 수신 대기할 포트를 설정합니다. 기본값은3080으로 설정되어 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| HOST | string | 호스트를 지정합니다. | HOST=localhost |
| PORT | number | 포트를 지정합니다. | PORT=3080 |
Trust proxy
Express 애플리케이션으로부터 최대 n개의 홉(hop) 거리에 있는 주소를 사용합니다.
req.socket.remoteAddress는 첫 번째 홉이며, 나머지는 X-Forwarded-For 헤더에서 오른쪽에서 왼쪽으로 탐색합니다.
값이 0이면 첫 번째 신뢰할 수 없는 주소가 req.socket.remoteAddress가 됨을 의미하며, 즉 리버스 프록시가 없음을 뜻합니다.
TRUST_PROXY 환경 변수의 기본값은 1로 설정되어 있습니다.
이에 대한 자세한 내용은 Express.js - trust proxy를 참조하세요.
| Key | Type | Description | Example |
|---|---|---|---|
| TRUST_PROXY | number | 홉 수를 지정합니다. | TRUST_PROXY=1 |
자격 증명(Credentials) 구성
자격 증명을 안전하게 저장하려면 고정된 키와 IV가 필요합니다. prod 및 dev 환경에 대해 여기에서 설정할 수 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| CREDS_KEY | string | 자격 증명을 안전하게 저장하기 위한 32바이트 키(16진수 64자). 앱 시작 시 필수입니다. | CREDS_KEY=f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0 |
| CREDS_IV | string | 자격 증명을 안전하게 저장하기 위한 16바이트 IV(16진수 32자). 앱 시작 시 필수입니다. | CREDS_IV=e2341419ec3dd3d19b13a1a87fafcbfb |
경고
경고: CREDS_KEY와 CREDS_IV를 설정하지 않으면 앱이 시작될 때 충돌이 발생합니다. - 이 키 생성기를 사용하여 빠르게 생성할 수 있습니다.
정적 파일 처리
| Key | Type | Description | Example |
|---|---|---|---|
| STATIC_CACHE_MAX_AGE | string | 초 단위의 Cache-Control max-age | STATIC_CACHE_MAX_AGE=172800 |
| STATIC_CACHE_S_MAX_AGE | string | 공유 캐시(CDN 및 프록시)를 위한 초 단위의 Cache-Control s-maxage | STATIC_CACHE_S_MAX_AGE="86400" |
| DISABLE_COMPRESSION | boolean | 정적 파일에 대한 압축을 비활성화합니다. | DISABLE_COMPRESSION=false |
| ENABLE_IMAGE_OUTPUT_GZIP_SCAN | boolean | 동일한 폴더에 존재하는 경우 업로드된 이미지의 gzipped 버전을 제공하도록 활성화합니다. | ENABLE_IMAGE_OUTPUT_GZIP_SCAN=true |
| ENABLE_STATIC_ASSET_BROTLI | boolean | 사용 가능한 경우 정적 앱 에셋의 사전 압축된 Brotli 버전을 제공하도록 활성화합니다. | ENABLE_STATIC_ASSET_BROTLI=true |
동작:
정적 파일에 대한 Cache-Control 헤더를 설정합니다. 이 구성은 NODE_ENV가 production으로 설정된 경우에만 트리거됩니다.
STATIC_CACHE_MAX_AGE의 주석을 해제하여 정적 파일에 대한 로컬max-age를 변경할 수 있습니다. 기본값은 2일(172800초)로 설정되어 있습니다.STATIC_CACHE_S_MAX_AGE의 주석을 해제하여 공유 캐시(CDN 및 프록시)에 대한s-maxage를 설정하세요. 기본값은 1일(86400초)로 설정되어 있습니다.DISABLE_COMPRESSION의 주석을 해제하면 정적 파일에 대한 압축을 비활성화할 수 있습니다. 기본적으로 압축은 활성화되어 있습니다.ENABLE_IMAGE_OUTPUT_GZIP_SCAN의 주석을 해제하면 동일한 폴더 내에 동일한 이름과 .gz 확장자로 미리 압축된 이미지가 있을 경우, 해당 gzip 버전의 이미지를 스캔하고 제공할 수 있습니다. 기본적으로 업로드된 이미지에 대한 gzip 스캔은 비활성화되어 있습니다.ENABLE_STATIC_ASSET_BROTLI의 주석을 해제하면 존재하는 경우 사전 압축된.br버전의 정적 앱 에셋을 제공합니다. 활성화되면 API를 통해 제공되는 정적 파일에 대해 gzip보다 Brotli가 우선적으로 사용됩니다.
경고
- 이는 API 서버에서 제공되는 정적 파일에만 영향을 미치며, Firebase, NGINX 또는 기타 다른 구성에는 적용되지 않습니다.
Index HTML 캐시 제어
| Key | Type | Description | Example |
|---|---|---|---|
| INDEX_CACHE_CONTROL | string | index.html에 대한 Cache-Control 헤더 | INDEX_CACHE_CONTROL=no-cache, no-store, must-revalidate |
| INDEX_PRAGMA | string | index.html을 위한 Pragma 헤더 | INDEX_PRAGMA=no-cache |
| INDEX_EXPIRES | string | index.html에 대한 Expires 헤더 | INDEX_EXPIRES=0 |
동작:
index.html 응답에 대한 캐싱 헤더를 구체적으로 제어합니다. 기본적으로 이러한 설정은 사용자가 항상 최신 버전의 애플리케이션을 받을 수 있도록 캐싱을 방지합니다.
참고
성능을 위해 캐시되는 정적 에셋과 달리, index.html 파일의 캐시 헤더는 사용자가 항상 최신 애플리케이션 셸을 받을 수 있도록 별도로 구성됩니다.
MongoDB 데이터베이스
| Key | Type | Description | Example |
|---|---|---|---|
| MONGO_URI | string | MongoDB URI를 지정합니다. | MONGO_URI=mongodb://127.0.0.1:27017/LibreChat |
다를 경우 이를 귀하의 MongoDB URI로 변경하십시오. URI의 데이터베이스 이름으로 LibreChat 또는 귀하만의 APP_TITLE을 추가해야 합니다.
온라인 데이터베이스를 사용하는 경우, URI 형식은 mongodb+srv://<username>:<password>@<host>/<database>?<options>입니다. 귀하의 MONGO_URI는 다음과 같아야 합니다:
mongodb+srv://username:[email protected]/LibreChat?retryWrites=true(retryWrites는 온라인 데이터베이스를 사용할 때 필요한 유일한 옵션입니다.)
MongoDB 연결 풀 구성
| Key | Type | Description | Example |
|---|---|---|---|
| MONGO_MAX_POOL_SIZE | number | 연결 풀의 최대 연결 수입니다. | # MONGO_MAX_POOL_SIZE= |
| MONGO_MIN_POOL_SIZE | number | 연결 풀의 최소 연결 수입니다. | # MONGO_MIN_POOL_SIZE= |
| MONGO_MAX_CONNECTING | number | 연결 풀에 의해 동시에 설정될 수 있는 최대 연결 수입니다. | # MONGO_MAX_CONNECTING= |
| MONGO_MAX_IDLE_TIME_MS | number | 연결이 풀에서 제거되고 닫히기 전까지 유휴 상태로 유지될 수 있는 최대 밀리초(ms) 수입니다. | # MONGO_MAX_IDLE_TIME_MS= |
| MONGO_WAIT_QUEUE_TIMEOUT_MS | number | 스레드가 연결을 사용할 수 있을 때까지 대기할 수 있는 최대 시간(밀리초 단위)입니다. | # MONGO_WAIT_QUEUE_TIMEOUT_MS= |
MongoDB 스키마 구성
| Key | Type | Description | Example |
|---|---|---|---|
| MONGO_AUTO_INDEX | boolean | 이 연결과 관련된 모든 모델에 대해 자동 인덱스 생성을 비활성화하려면 false로 설정하세요. 생략할 경우 Mongoose 기본 동작을 사용합니다. | # MONGO_AUTO_INDEX= |
| MONGO_AUTO_CREATE | boolean | Mongoose가 이 연결에서 생성된 모든 모델에 대해 자동으로 createCollection()을 호출하지 않도록 하려면 false로 설정하세요. 생략 시 Mongoose 기본 동작을 사용합니다. | # MONGO_AUTO_CREATE= |
또는 mongoDb를 에뮬레이트하는 documentDb를 사용할 수 있지만, 다음 사항이 있습니다:
retryWrites를 지원하지 않습니다 -retryWrites=false를 사용하세요- TLS 연결이 필요하므로,
tls=true매개변수를 사용하여 TLS를 활성화하고tlsCAFile=/path-to-ca/bundle.pem을 사용하여 AWS에서 제공하는 CA 번들 파일을 지정하십시오.
documentDb에 대한 URI는 다음과 같습니다:
mongodb+srv://username:password@domain/dbname?retryWrites=false&tls=true&tlsCAFile=/path-to-ca/bundle.pem
참고:
- MongoDB Atlas (Docker 없이 사용할 때 유용한 온라인 MongoDB Atlas 데이터베이스 생성 방법에 대한 안내)
- MongoDB Community Server에서 로컬 MongoDB 데이터베이스를 생성하는 방법(Docker 제외)에 대한 지침을 확인하세요.
- MongoDB Authentication Docker에서 MongoDB에 대한 명시적 인증을 활성화합니다.
- Mongo Express로 데이터베이스 관리하기를 통해 Docker MongoDB 데이터베이스에 안전하게 액세스하세요
애플리케이션 도메인
LibreChat을 로컬 환경이나 사용자 지정 도메인에 배포하도록 구성하려면 다음 환경 변수를 설정하세요:
| Key | Type | Description | Example |
|---|---|---|---|
| DOMAIN_CLIENT | string | 클라이언트 측 도메인을 지정합니다. | DOMAIN_CLIENT=http://localhost:3080 |
| DOMAIN_SERVER | string | 서버 측 도메인을 지정합니다. | DOMAIN_SERVER=http://localhost:3080 |
| ADMIN_PANEL_URL | string | 관리자 패널이 별도로 호스팅되는 경우 관리자 OAuth/SSO 리디렉션에 사용되는 외부 관리자 패널 기본 URL입니다. 마지막에 슬래시(/)를 포함하지 마십시오. | ADMIN_PANEL_URL=https://admin.example.com/admin |
| ADMIN_PANEL_SESSION_SECRET | string | 번들로 제공되는 관리자 패널에 필요한 세션 암호화 키입니다(최소 32자). docker-compose 및 deploy-compose의 admin-panel 서비스는 이를 SESSION_SECRET으로 읽습니다. 스택을 시작하기 전에 `openssl rand -hex 32` 명령어로 생성하십시오. | ADMIN_PANEL_SESSION_SECRET=<your-32-char-random-string> |
| ADMIN_PANEL_PORT | number | Host port for the bundled admin panel in the default docker-compose. In deploy-compose the panel is served at http://admin.localhost via nginx instead. | ADMIN_PANEL_PORT=3000 |
LibreChat을 사용자 지정 도메인에 배포할 때는 http://localhost:3080을 배포한 URL로 교체하세요.
- 예:
https://librechat.example.com.
공개 검색 엔진의 인덱싱 방지
기본적으로 귀하의 웹사이트는 공개 검색 엔진(예: Google, Bing 등)에 의해 색인되지 않습니다. 이는 사람들이 이러한 검색 엔진을 통해 귀하의 웹사이트를 찾을 수 없음을 의미합니다. 웹사이트의 가시성을 높이고 검색 가능하게 만들고 싶다면, 다음 설정을 false로 변경할 수 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| NO_INDEX | boolean | 공개 검색 엔진이 웹사이트를 색인화하지 못하도록 방지합니다. | NO_INDEX=true |
❗참고: 이 방법이 모든 검색 엔진에서 작동한다고 보장할 수는 없으며, 일부 검색 엔진은 캐싱이나 아카이빙과 같은 다른 목적으로 귀하의 웹사이트나 웹 페이지를 여전히 색인화할 수 있습니다. 따라서 웹사이트나 웹 페이지의 민감하거나 기밀인 정보를 보호하기 위해 이 방법만 전적으로 의존해서는 안 됩니다.
로깅
LibreChat은 중앙 집중식 로깅 기능을 내장하고 있습니다. 자세한 내용은 Logging System을 참조하세요.
로그 파일
- 디버그 로깅은 기본적으로 활성화되어 있으며 개발에 매우 중요합니다.
- 문제를 보고하려면 오류를 재현한 후
./api/logs/debug-%DATE%.log의 로그를 **LibreChat GitHub Issues**에 제출해 주세요. - 오류 로그는 동일한 위치에 저장됩니다.
환경 변수
| Key | Type | Description | Example |
|---|---|---|---|
| DEBUG_LOGGING | boolean | 디버그 로그를 활성 상태로 유지합니다. | DEBUG_LOGGING=true |
| DEBUG_CONSOLE | boolean | 파일 디버그 로그와 동일한 형식으로 상세 콘솔/stdout 로그를 활성화합니다. | DEBUG_CONSOLE=false |
| LOG_TO_FILE | boolean | file-backed Winston 전송을 비활성화하고 콘솔 로깅은 유지하려면 false로 설정하세요. | LOG_TO_FILE=true |
| CONSOLE_JSON | boolean | GCP/AWS와 같은 클라우드 배포에 적합한 상세 JSON 콘솔/stdout 로그를 활성화합니다. | CONSOLE_JSON=false |
| CONSOLE_JSON_STRING_LENGTH | number | JSON 콘솔/stdout 로그의 문자열 값에 대한 잘림 크기를 설정합니다. 기본값: 255. | # CONSOLE_JSON_STRING_LENGTH=255 |
| LIBRECHAT_LOG_DIR | string | 로그 파일용 사용자 지정 디렉터리입니다. 기본값은 /app/logs (Docker) 또는 api/logs (로컬 개발)입니다. | # LIBRECHAT_LOG_DIR=/custom/log/path |
| MEM_DIAG | boolean | 메모리 진단 활성화 — 60초마다 힙/RSS 스냅샷을 로그로 기록합니다. --inspect와 함께 실행 시 자동으로 활성화됩니다. | # MEM_DIAG=true |
| AGENT_DEBUG_LOGGING | boolean | 에이전트 컨트롤러에서 상세 디버그 로깅(토큰 수, 컨텍스트 정리 진단)을 활성화합니다. | # AGENT_DEBUG_LOGGING=true |
참고:
DEBUG_LOGGING은DEBUG_CONSOLE또는CONSOLE_JSON중 하나와 함께 사용할 수 있지만, 둘 다 동시에 사용할 수는 없습니다.DEBUG_CONSOLE와CONSOLE_JSON은 상호 배타적입니다.CONSOLE_JSON: 클라우드 배포(GCP 또는 AWS 등)에서 콘솔 로그를 처리할 때, 이 옵션을 활성화하면 UTC 타임스탬프가 포함된 JSON 형식으로 로그가 출력됩니다.
참고: DEBUG_CONSOLE은 출력이 매우 장황할 수 있으므로 권장되지 않으며, 기본적으로 비활성화되어 있습니다.
권한
UID와 GID는 시스템의 각 사용자와 그룹에 할당된 Linux 숫자입니다. 권한 문제가 발생하는 경우, Docker Compose 명령을 실행하는 사용자의 UID와 GID를 여기에 설정하십시오. 컨테이너 내의 애플리케이션은 이 UID/GID로 실행됩니다.
| Key | Type | Description | Example |
|---|---|---|---|
| UID | number | 사용자 ID. | # UID=1000 |
| GID | number | 그룹 ID. | # GID=1000 |
OpenTelemetry Tracing
LibreChat은 일반 API, HTTP, MongoDB, Mongoose, Redis 및 아웃바운드 요청 가시성을 위해 백엔드 OpenTelemetry 추적을 내보낼 수 있습니다. Redis 명령 수준 스팬(span)은 선택 사항이므로 기본 추적은 상위 수준으로 유지됩니다. GenAI 관련 프롬프트/모델 관측 가능성을 위해서는 Langfuse를 사용하세요.
| Key | Type | Description | Example |
|---|---|---|---|
| OTEL_TRACING_ENABLED | boolean | 백엔드 OpenTelemetry 추적을 활성화합니다. OTEL_SDK_DISABLED=true일 경우 추적은 비활성화된 상태로 유지됩니다. | # OTEL_TRACING_ENABLED=false |
| OTEL_SERVICE_NAME | string | OpenTelemetry에 보고되는 서비스 이름입니다. 기본값: librechat. | # OTEL_SERVICE_NAME=librechat |
| OTEL_SERVICE_VERSION | string | OpenTelemetry에 보고되는 서비스 버전입니다. 설정되지 않은 경우 패키지 버전이 기본값으로 사용됩니다. | # OTEL_SERVICE_VERSION= |
| OTEL_EXPORTER_OTLP_ENDPOINT | string | 기본 OTLP exporter endpoint. | # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 |
| OTEL_EXPORTER_OTLP_TRACES_ENDPOINT | string | 추적 전용 OTLP endpoint입니다. 설정 시 추적을 위한 기본 endpoint를 재정의합니다. | # OTEL_EXPORTER_OTLP_TRACES_ENDPOINT= |
| OTEL_EXPORTER_OTLP_HEADERS | string | 인증 메타데이터와 같은 쉼표로 구분된 OTLP 내보내기 헤더입니다. | # OTEL_EXPORTER_OTLP_HEADERS= |
| OTEL_TRACES_EXPORTER | string | Trace exporter 선택. | # OTEL_TRACES_EXPORTER=otlp |
| OTEL_TRACES_SAMPLER | string | OpenTelemetry 트레이스 샘플러. 기본 예시: parentbased_always_on. | # OTEL_TRACES_SAMPLER=parentbased_always_on |
| OTEL_LOG_LEVEL | string | OpenTelemetry SDK 로그 레벨. | # OTEL_LOG_LEVEL=INFO |
| OTEL_SDK_DISABLED | boolean | 추적(tracing)이 활성화되어 있더라도 OpenTelemetry SDK를 비활성화합니다. | # OTEL_SDK_DISABLED=false |
| OTEL_IOREDIS_TRACING_ENABLED | boolean | Redis 명령 수준 스팬을 활성화합니다. 백엔드 추적을 상위 수준으로 유지하기 위해 기본적으로 비활성화되어 있습니다. | # OTEL_IOREDIS_TRACING_ENABLED=false |
실제 사용자 모니터링 (브라우저)
LibreChat은 브라우저 RUM(Real User Monitoring) 텔레메트리를 HyperDX 호환 OTLP 수집기로 게시할 수 있습니다. RUM은 기본적으로 비활성화되어 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| RUM_ENABLED | boolean | 브라우저 Real User Monitoring을 활성화합니다. 기본값: false. | # RUM_ENABLED=false |
| RUM_PROVIDER | string | 브라우저 RUM 공급자입니다. 현재 `hyperdx`를 지원합니다. | # RUM_PROVIDER=hyperdx |
| RUM_URL | string | public-token 모드에서 사용하는 공개 수집기 URL입니다. | # RUM_URL=http://localhost:4318 |
| RUM_SERVICE_NAME | string | 브라우저 SDK가 보고하는 서비스 이름입니다. 기본값: librechat-web. | # RUM_SERVICE_NAME=librechat-web |
| RUM_ENVIRONMENT | string | 브라우저 텔레메트리로 보고된 환경 레이블. | # RUM_ENVIRONMENT=development |
| RUM_AUTH_MODE | string | 브라우저 텔레메트리를 위한 인증 모드입니다. `publicToken` 또는 `proxy`를 사용하세요. | # RUM_AUTH_MODE=publicToken |
| RUM_PUBLIC_TOKEN | string | public-token 모드를 위한 공개 브라우저 토큰입니다. 이를 공개용으로 취급하고 수집기(collector)에서의 수집을 제한하십시오. | # RUM_PUBLIC_TOKEN= |
| RUM_PROXY_TARGET_URL | string | 인증된 프록시 모드에서 사용되는 Collector base URL입니다. `RUM_AUTH_MODE=proxy`일 때 필수입니다. | # RUM_PROXY_TARGET_URL=http://otel-collector:4318 |
| RUM_PROXY_TIMEOUT_MS | number | 밀리초 단위의 프록시 요청 시간 제한입니다. 기본값: 10000. | # RUM_PROXY_TIMEOUT_MS=10000 |
| RUM_TRACE_PROPAGATION_TARGETS | string | traceparent 헤더를 수신해야 하는 쉼표로 구분된 자사 HTTPS 오리진 또는 URL입니다. | # RUM_TRACE_PROPAGATION_TARGETS=https://api.example.com |
| RUM_DISABLE_REPLAY | boolean | 브라우저 세션 리플레이를 비활성화합니다. 기본값: true. | # RUM_DISABLE_REPLAY=true |
| RUM_CONSOLE_CAPTURE | boolean | 브라우저 콘솔 로그를 캡처합니다. 민감한 프롬프트, 응답 또는 페이로드가 수집될 수 있습니다. | # RUM_CONSOLE_CAPTURE=false |
| RUM_ADVANCED_NETWORK_CAPTURE | boolean | 상세한 네트워크 페이로드를 캡처합니다. 민감한 프롬프트, 응답 또는 페이로드가 수집될 수 있습니다. | # RUM_ADVANCED_NETWORK_CAPTURE=false |
| RUM_SAMPLE_RATE | number | 브라우저 원격 분석 샘플링 비율(0에서 1 사이). 기본값: 1. | # RUM_SAMPLE_RATE=1 |
publicToken 모드에서 브라우저는 RUM_PUBLIC_TOKEN과 함께 RUM_URL로 원격 분석(telemetry) 데이터를 직접 전송합니다. proxy 모드에서 브라우저는 LibreChat을 통해 원격 분석 데이터를 전송하며, 백엔드는 사용자 세션을 검증하고 앱 인증 헤더를 제거한 뒤 RUM_PROXY_TARGET_URL로 데이터를 전달합니다. 유효하지 않거나 만료된 세션은 204 응답과 함께 삭제되므로 브라우저의 원격 분석 실패가 일반적인 API 인증 오류로 나타나지 않습니다. 프록시 결과는 LibreChat API /metrics 엔드포인트에서 endpoint 및 result 레이블이 지정된 rum_proxy_requests_total로 집계됩니다.
구성 경로 - librechat.yaml
LibreChat 설정 파일의 대체 위치를 지정합니다.
절대 경로, 상대 경로 또는 URL을 지정할 수 있습니다. 경로 내의 파일 이름은 유연하게 설정할 수 있으며 반드시 librechat.yaml일 필요는 없습니다. 유효한 설정 파일이라면 무엇이든 작동합니다.
참고: LibreChat이 루트 디렉토리에서 설정 파일을 검색하도록 하려면(기본 동작), 이 옵션을 주석 처리된 상태로 두면 됩니다.
| Key | Type | Description | Example |
|---|---|---|---|
| CONFIG_PATH | string | LibreChat 설정 파일을 위한 대체 위치입니다. | # CONFIG_PATH=https://raw.githubusercontent.com/danny-avila/LibreChat/main/librechat.example.yaml |
배포 기술
Deployment Skills는 시작 시 파일 시스템에서 읽기 전용으로 로드되며, Skills 기능이 활성화된 사용자에게 노출됩니다.
| Key | Type | Description | Example |
|---|---|---|---|
| DEPLOYMENT_SKILLS_DIR | string | 배포 시 제공되는 Skill이 포함된 디렉토리입니다. 프로젝트 루트의 `./skill`로 기본 설정됩니다. | # DEPLOYMENT_SKILLS_DIR=./skill |
이 디렉토리나 그 안의 파일을 변경한 후에는 LibreChat을 재시작하십시오. 배포 시 제공된 Skills는 동일한 이름을 가진 영구 저장된 Skills보다 우선합니다.
구성 유효성 검사
기본적으로 LibreChat은 librechat.yaml 구성 파일에 유효성 검사 오류가 포함되어 있으면 오류(종료 코드 1)와 함께 종료됩니다. 이러한 빠른 실패(fail-fast) 동작은 배포 파이프라인 초기에 구성 문제를 포착하고 의도하지 않은 기본 설정으로 실행되는 것을 방지하는 데 도움이 됩니다.
| Key | Type | Description | Example |
|---|---|---|---|
| CONFIG_BYPASS_VALIDATION | boolean | `true`로 설정하면, `librechat.yaml`에 유효성 검사 오류가 있더라도 서버가 경고를 기록하고 기본 구성으로 시작을 계속합니다. 이는 레거시 동작을 유지합니다. | # CONFIG_BYPASS_VALIDATION=true |
경고
CONFIG_BYPASS_VALIDATION=true를 프로덕션 환경에서 사용하는 것은 권장되지 않습니다. 이는 구성 문제를 디버깅하는 동안의 임시 해결책으로 의도되었습니다. 항상 구성 파일의 유효성 검사 오류를 수정하십시오.
Uncaught Exception Handling
기본적으로 LibreChat은 처리되지 않은 예외가 발생하면 프로세스를 종료하며, 이는 표준 Node.js 동작 방식입니다. 처리되지 않은 예외 발생 후에도 앱이 계속 실행되도록 이 설정을 재정의할 수 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| CONTINUE_ON_UNCAUGHT_EXCEPTION | boolean | `true`로 설정하면, 앱이 처리되지 않은 예외가 발생해도 프로세스를 종료하지 않고 계속 실행됩니다. | # CONTINUE_ON_UNCAUGHT_EXCEPTION=false |
경고
필요한 경우가 아니라면 프로덕션 환경에서는 권장되지 않습니다. 처리되지 않은 예외(Uncaught exceptions)로 인해 애플리케이션이 예측할 수 없는 상태가 될 수 있습니다.
Endpoints
이 섹션에서는 엔드포인트 및 모델 선택, API 키, 그리고 이를 지원하는 엔드포인트에 대한 프록시 및 리버스 프록시 설정을 구성할 수 있습니다.
일반 설정
ENDPOINTS의 주석을 해제하여 LibreChat에서 사용 가능한 endpoint를 사용자 지정하세요.
| Key | Type | Description | Example |
|---|---|---|---|
| ENDPOINTS | string | 사용 가능한 endpoint의 쉼표로 구분된 목록입니다. | # ENDPOINTS=openAI,agents,assistants,gptPlugins,azureOpenAI,google,anthropic,bingAI,custom |
| PROXY | string | 지원되는 서버 측 클라이언트를 위한 아웃바운드 프록시입니다. HTTP 및 HTTPS 대상 모두에 적용됩니다. | PROXY= |
| HTTP_PROXY | string | PROXY가 설정되지 않았을 때 지원되는 서버 측 클라이언트가 사용하는 HTTP 프록시 폴백입니다. | # HTTP_PROXY= |
| HTTPS_PROXY | string | PROXY가 설정되지 않았을 때 지원되는 서버 측 클라이언트가 사용하는 HTTPS 프록시 폴백입니다. | # HTTPS_PROXY= |
| NO_PROXY | string | 지원되는 서버 측 클라이언트가 우회해야 하는 호스트, 도메인 또는 IP 범위를 쉼표로 구분하여 입력합니다. 소문자 no_proxy 변형도 지원됩니다. | # NO_PROXY= |
| TITLE_CONVO | boolean | 모든 endpoint에 대한 제목 생성 기능을 활성화합니다. | TITLE_CONVO=true |
알려진 엔드포인트 - librechat.yaml
| Key | Type | Description | Example |
|---|---|---|---|
| ANYSCALE_API_KEY | string | Anyscale용 API 키. | # ANYSCALE_API_KEY= |
| APIPIE_API_KEY | string | Apipie용 API 키 | # APIPIE_API_KEY= |
| COHERE_API_KEY | string | Cohere용 API 키. | # COHERE_API_KEY= |
| FIREWORKS_API_KEY | string | Fireworks용 API 키 | # FIREWORKS_API_KEY= |
| GROQ_API_KEY | string | Groq용 API 키 | # GROQ_API_KEY= |
| MISTRAL_API_KEY | string | Mistral용 API 키 | # MISTRAL_API_KEY= |
| OPENROUTER_KEY | string | OpenRouter용 API 키. | # OPENROUTER_KEY= |
| PERPLEXITY_API_KEY | string | Perplexity용 API 키 | # PERPLEXITY_API_KEY= |
| SHUTTLEAI_API_KEY | string | ShuttleAI용 API 키. | # SHUTTLEAI_API_KEY= |
| TOGETHERAI_API_KEY | string | TogetherAI용 API 키 | # TOGETHERAI_API_KEY= |
| DEEPSEEK_API_KEY | string | Deepseek API용 API 키 | # DEEPSEEK_API_KEY= |
웹 검색
웹 검색 기능은 LibreChat 내에서 인터넷 검색 기능을 활성화합니다.
중요: 아래에 표시된 정확한 환경 변수 이름은 기본 참조이며, librechat.yaml 구성 파일을 통해 원하는 변수 이름을 사용하도록 사용자 지정할 수 있습니다.
자세한 구성 및 사용자 지정 옵션은 다음을 참조하세요: Web Search Configuration
| Key | Type | Description | Example |
|---|---|---|---|
| SERPER_API_KEY | string | Serper 검색 제공업체를 위한 API 키입니다. https://serper.dev/api-keys 에서 키를 발급받으세요. | # SERPER_API_KEY= |
| TAVILY_API_KEY | string | Tavily 검색 및 스크레이퍼 제공업체를 위한 API 키입니다. https://app.tavily.com/home 에서 키를 발급받으세요. | # TAVILY_API_KEY= |
| TAVILY_SEARCH_URL | string | 사용자 지정 Tavily Search API URL (선택 사항). 사용자 지정 또는 프록시 Tavily 호환 검색 endpoint에만 필요합니다. | # TAVILY_SEARCH_URL= |
| TAVILY_EXTRACT_URL | string | 사용자 지정 Tavily Extract API URL (선택 사항). 사용자 지정 또는 프록시 Tavily 호환 extract endpoint에만 필요합니다. | # TAVILY_EXTRACT_URL= |
| FIRECRAWL_API_KEY | string | Firecrawl 스크레이퍼 서비스를 위한 API key입니다. https://docs.firecrawl.dev/introduction#api-key 에서 키를 발급받으세요. | # FIRECRAWL_API_KEY= |
| FIRECRAWL_API_URL | string | 사용자 지정 Firecrawl API URL (선택 사항). 사용자 지정 Firecrawl 인스턴스에만 필요합니다. | # FIRECRAWL_API_URL= |
| FIRECRAWL_VERSION | string | Firecrawl API 버전 (v0 또는 v1). | # FIRECRAWL_VERSION=v1 |
| JINA_API_KEY | string | Jina reranker 서비스를 위한 API 키입니다. https://jina.ai/api-dashboard/ 에서 키를 발급받으세요. | # JINA_API_KEY= |
| JINA_API_URL | string | 사용자 지정 Jina API URL (선택 사항). 사용자 지정 Jina 인스턴스에만 필요합니다. | # JINA_API_URL= |
| COHERE_API_KEY | string | Cohere reranker 서비스를 위한 API 키입니다. https://dashboard.cohere.com/welcome/login 에서 키를 발급받으세요. | # COHERE_API_KEY= |
참고: 이 변수 이름들은 librechat.yaml 구성 파일에서 사용자 지정할 수 있습니다. 예를 들어, 웹 검색 설정에서 구성하여 SERPER_API_KEY 대신 CUSTOM_SERPER_KEY를 사용할 수 있습니다. 변수 이름 사용자 지정에 대한 자세한 내용은 Web Search Configuration 문서를 참조하세요.
Anthropic
- https://platform.claude.com/ 에서 액세스 키를 요청할 수 있습니다.
ANTHROPIC_API_KEY=를 비워두면 이 endpoint가 비활성화됩니다.ANTHROPIC_API_KEY=를 "user_provided"로 설정하여 사용자가 WebUI에서 자신의 API 키를 직접 입력할 수 있도록 합니다.Anthropic에 대한 리버스 프록시(reverse proxy) 접근 권한이 있는 경우,ANTHROPIC_REVERSE_PROXY=를 사용하여 설정할 수 있습니다.- 기본 base url을 사용하려면 비워두거나 주석 처리하세요
| Key | Type | Description | Example |
|---|---|---|---|
| ANTHROPIC_API_KEY | string | Anthropic API 키 또는 사용자가 직접 API 키를 제공할 수 있도록 하려면 "user_provided"를 입력하세요. | Defaults to an empty string. |
| ANTHROPIC_MODELS | string | 사용할 Anthropic 모델의 쉼표로 구분된 목록입니다. | # ANTHROPIC_MODELS=claude-fable-5,claude-opus-4-8,claude-opus-4-7,claude-sonnet-4-6,claude-opus-4-6,claude-opus-4-20250514,claude-3-7-sonnet-20250219,claude-3-5-sonnet-20241022,claude-3-5-haiku-20241022 |
| ANTHROPIC_REVERSE_PROXY | string | Anthropic을 위한 리버스 프록시. | # ANTHROPIC_REVERSE_PROXY= |
| ANTHROPIC_TITLE_MODEL | string | 사용 중단됨: Anthropic으로 제목을 생성할 때 사용할 모델입니다. | # ANTHROPIC_TITLE_MODEL=claude-3-haiku-20240307 |
ANTHROPIC_TITLE_MODEL은 이제 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. 대신librechat.yaml설정의titleModel엔드포인트 설정을 사용하세요.
참고: Anthropic endpoint와 호환되어야 합니다. 또한, Claude 2 및 Claude 3 모델이 이 작업에서 가장 뛰어난 성능을 발휘하며,
claude-3-haiku모델이 가장 저렴합니다.
Claude Fable 5는 기본 Anthropic 모델 목록에 포함되어 있습니다. Fable/Mythos급 모델은 LibreChat에서 최신 Anthropic 동작을 사용합니다: 1M 컨텍스트, 적응형 사고(adaptive thinking) 지원, 프롬프트 캐싱 지원, 그리고 요약되거나 생략된 추론 출력을 위한 thinkingDisplay 처리가 포함됩니다.
Vertex AI를 통한 Anthropic
Google Cloud Vertex AI를 통해 Anthropic Claude 모델을 사용할 수도 있습니다. 자세한 YAML 구성 옵션은 다음을 참조하세요: Anthropic Vertex AI 구성
| Key | Type | Description | Example |
|---|---|---|---|
| ANTHROPIC_USE_VERTEX | boolean | 직접 API 대신 Google Vertex AI를 통해 Anthropic 모델을 사용하려면 true로 설정하세요. | ANTHROPIC_USE_VERTEX=true |
| ANTHROPIC_VERTEX_REGION | string | Vertex AI를 위한 Google Cloud 리전입니다. 기본값: us-east5. | ANTHROPIC_VERTEX_REGION=us-east5 |
참고: Vertex AI를 사용할 때는
Vertex AI User역할이 있는 서비스 계정으로GOOGLE_SERVICE_KEY_FILE을 구성해야 합니다(Google 구성 참조).
AWS Bedrock
참고: AWS Bedrock 설정
| Key | Type | Description | Example |
|---|---|---|---|
| BEDROCK_AWS_DEFAULT_REGION | string | Bedrock을 사용하려면 기본 AWS 리전을 지정해야 합니다. | BEDROCK_AWS_DEFAULT_REGION=us-east-1 |
| BEDROCK_AWS_ACCESS_KEY_ID | string | Bedrock을 위한 AWS access key ID입니다. 기본 AWS 자격 증명 체인을 사용하는 경우 선택 사항입니다. | # BEDROCK_AWS_ACCESS_KEY_ID=your_access_key_id |
| BEDROCK_AWS_SECRET_ACCESS_KEY | string | Bedrock을 위한 AWS secret access key입니다. 기본 AWS 자격 증명 체인을 사용하는 경우 선택 사항입니다. | # BEDROCK_AWS_SECRET_ACCESS_KEY=your_secret_access_key |
| BEDROCK_AWS_SESSION_TOKEN | string | 임시 자격 증명을 위한 AWS 세션 토큰입니다. 선택 사항입니다. | # BEDROCK_AWS_SESSION_TOKEN=your_session_token |
| BEDROCK_AWS_PROFILE | string | Bedrock을 위한 AWS 공유 설정 프로필 이름입니다. 기본 AWS 자격 증명 체인을 사용하는 경우 선택 사항입니다. | # BEDROCK_AWS_PROFILE=your-profile-name |
| BEDROCK_AWS_BEARER_TOKEN | string | Bearer 인증을 위한 Amazon Bedrock API 키, 또는 사용자가 UI에서 자신의 Bedrock API 키를 직접 입력하도록 하려면 user_provided를 사용하세요. | # BEDROCK_AWS_BEARER_TOKEN=your_bedrock_api_key |
| BEDROCK_AWS_MODELS | string | 쉼표로 구분된 Bedrock 모델 ID 목록입니다. 생략할 경우, 알려진 모든 지원 모델이 포함됩니다. | # BEDROCK_AWS_MODELS=anthropic.claude-fable-5,anthropic.claude-opus-4-8,anthropic.claude-opus-4-7,anthropic.claude-sonnet-4-6,meta.llama3-1-8b-instruct-v1:0 |
참고: 액세스 키를 생략하면 기본 AWS 자격 증명 체인(환경 변수, SSO 자격 증명, 공유 자격 증명 파일 또는 EC2/ECS 인스턴스 메타데이터 서비스)을 사용할 수 있습니다. 자세한 내용은 AWS Bedrock Setup을 참조하세요.
Bedrock의 Claude Fable/Mythos 클래스 모델은 추론 프로필(inference-profile) 전용입니다. us.anthropic.claude-fable-5와 같은 프로필 ID를 사용하고, 모델을 호출하기 전에 Bedrock 콘솔 또는 Data Retention API에서 필요한 Anthropic 데이터 공유 설정을 활성화하십시오.
BingAI
Bing (Sydney, jailbreak, 및 Bing Image Creator에도 사용됨)
| Key | Type | Description | Example |
|---|---|---|---|
| BINGAI_TOKEN | string | Bing 액세스 토큰입니다. 비활성화하려면 비워 두세요. 사용자가 WebUI에서 자신의 토큰을 직접 입력하게 하려면 "user_provided"로 설정할 수 있습니다. | BINGAI_TOKEN=user_provided |
| BINGAI_HOST | string | Bing 호스트 URL입니다. 기본 서버를 사용하려면 주석 처리된 상태로 두세요. | # BINGAI_HOST=https://cn.bing.com |
참고: "user_provided"로 두고 WebUI에서 토큰을 입력하는 것을 권장합니다.
Google Endpoint을 설정하려면 다음 지침을 따르세요.
| Key | Type | Description | Example |
|---|---|---|---|
| GOOGLE_KEY | string | Google API key. 사용자가 WebUI에서 자신의 API key를 직접 입력할 수 있도록 하려면 "user_provided"로 설정하세요. | GOOGLE_KEY=user_provided |
| GOOGLE_SERVICE_KEY_FILE | string | Google 서비스 계정 JSON 키 파일 경로, 가져올 URL 또는 문자열화된 JSON입니다. Vertex AI 인증(예: OCR 기능)에 사용됩니다. | GOOGLE_SERVICE_KEY_FILE=/path/to/auth.json |
| GOOGLE_REVERSE_PROXY | string | Google 리버스 프록시 URL. | GOOGLE_REVERSE_PROXY= |
| GOOGLE_AUTH_HEADER | boolean | X-goog-api-key 대신 Authorization 헤더를 사용하세요. 일부 리버스 프록시에서 이 방식이 필요합니다. | # GOOGLE_AUTH_HEADER=true |
| GOOGLE_MODELS | string | 쉼표로 구분된 사용 가능한 Gemini API Google 모델입니다. | GOOGLE_MODELS=gemini-3.1-pro-preview,gemini-3.1-pro-preview-customtools,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash,gemini-2.0-flash-lite |
| GOOGLE_MODELS | string | 쉼표로 구분된 사용 가능한 Vertex AI Google 모델입니다. | GOOGLE_MODELS=gemini-3.1-pro-preview,gemini-3.1-pro-preview-customtools,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash-001,gemini-2.0-flash-lite-001 |
| GOOGLE_TITLE_MODEL | string | 사용 중단됨: Google을 사용한 제목 생성에 사용되는 모델입니다. | GOOGLE_TITLE_MODEL=gemini-pro |
| GOOGLE_LOC | string | API 요청을 처리하기 위한 Google Cloud 위치를 지정합니다 | GOOGLE_LOC=us-central1 |
| GOOGLE_CLOUD_LOCATION | string | Gemini 이미지 생성을 위한 대체 리전 (예: global). | # GOOGLE_CLOUD_LOCATION=global |
| GOOGLE_EXCLUDE_SAFETY_SETTINGS | string | 기본적으로 포함된 안전 설정을 완전히 생략하며, 이 경우 제공업체의 기본값이 사용됩니다 | GOOGLE_EXCLUDE_SAFETY_SETTINGS=true |
| GOOGLE_SAFETY_SEXUALLY_EXPLICIT | string | 성적으로 노골적인 콘텐츠에 대한 안전 설정입니다. 옵션은 BLOCK_ALL, BLOCK_ONLY_HIGH, WARN_ONLY, OFF입니다. | GOOGLE_SAFETY_SEXUALLY_EXPLICIT=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_HATE_SPEECH | string | 혐오 표현 콘텐츠에 대한 안전 설정입니다. 옵션은 BLOCK_ALL, BLOCK_ONLY_HIGH, WARN_ONLY, OFF입니다. | GOOGLE_SAFETY_HATE_SPEECH=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_HARASSMENT | string | 괴롭힘 콘텐츠에 대한 안전 설정입니다. 옵션은 BLOCK_ALL, BLOCK_ONLY_HIGH, WARN_ONLY, OFF가 있습니다. | GOOGLE_SAFETY_HARASSMENT=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_DANGEROUS_CONTENT | string | 위험한 콘텐츠에 대한 안전 설정입니다. 옵션은 BLOCK_ALL, BLOCK_ONLY_HIGH, WARN_ONLY, OFF가 있습니다. | GOOGLE_SAFETY_DANGEROUS_CONTENT=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_CIVIC_INTEGRITY | string | 시민 무결성 콘텐츠에 대한 안전 설정입니다. 옵션은 BLOCK_ALL, BLOCK_ONLY_HIGH, WARN_ONLY, OFF가 있습니다. | # GOOGLE_SAFETY_CIVIC_INTEGRITY=BLOCK_ONLY_HIGH |
사용 가능한 모델을 쉼표로 구분하여 지정하세요. 공백은 포함하지 마세요. 첫 번째 모델이 기본값으로 설정됩니다. 내부 설정을 사용하려면 비워두거나 주석 처리하세요.
GOOGLE_TITLE_MODEL은 이제 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. 대신librechat.yaml설정의titleModel엔드포인트 설정을 사용하세요.
참고: Vertex AI GOOGLE_SAFETY 변수의 경우, 기본적으로 BLOCK_NONE 설정에 액세스할 수 없습니다. 이 제한된 HarmBlockThreshold 설정을 사용하려면 다음 중 하나를 수행해야 합니다:
- (a) Google 계정 팀을 통해 허용 목록(allowlist)에 대한 액세스 권한을 얻으세요
- (b) 다음 지침에 따라 계정 유형을 월별 청구서 발행 방식으로 전환하세요: https://cloud.google.com/billing/docs/how-to/invoiced-billing
Gemini 이미지 생성
Gemini Image Generation은 Gemini API와 Vertex AI를 모두 지원하는 에이전트용 도구입니다. 자세한 내용은 다음을 참조하세요: Gemini Image Generation
| Key | Type | Description | Example |
|---|---|---|---|
| GEMINI_API_KEY | string | 이미지 생성을 위한 전용 Gemini API 키입니다. 설정되지 않은 경우 GOOGLE_KEY로 대체됩니다. | # GEMINI_API_KEY=your_gemini_api_key |
| GEMINI_IMAGE_MODEL | string | 이미지 생성을 위한 Gemini 모델. 기본값: gemini-2.5-flash-image. | # GEMINI_IMAGE_MODEL=gemini-2.5-flash-image |
참고: API 키가 구성되지 않은 경우, 도구는
GOOGLE_SERVICE_KEY_FILE의 서비스 계정을 사용하여 자동으로 Vertex AI로 대체됩니다. 해당 서비스 계정에는 반드시Vertex AI User역할이 할당되어 있어야 합니다.
OpenAI
참고: OpenAI Setup
| Key | Type | Description | Example |
|---|---|---|---|
| OPENAI_API_KEY | string | 사용자의 OpenAI API 키입니다. 이 엔드포인트를 비활성화하려면 비워두거나, 사용자가 WebUI에서 직접 API 키를 입력하도록 하려면 "user_provided"로 설정하세요. | OPENAI_API_KEY=user_provided |
| OPENAI_MODELS | string | 사용 가능한 모델을 쉼표로 구분하여 지정하세요(공백 없음). 첫 번째 모델이 기본값으로 설정됩니다. 내부 설정을 사용하려면 주석 처리된 상태로 두세요. | # OPENAI_MODELS=gpt-5,gpt-5-codex,gpt-5-mini,gpt-5-nano,o3-pro,o3,o4-mini,gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,o3-mini,o1-pro,o1,gpt-4o,gpt-4o-mini |
| DEBUG_OPENAI | boolean | OpenAI endpoint에 대한 디버그 모드를 활성화합니다. | DEBUG_OPENAI=false |
| OPENAI_SUMMARIZE | boolean | 메시지 요약 기능을 활성화합니다. 기본값은 False입니다. | # OPENAI_SUMMARIZE=true |
| OPENAI_SUMMARY_MODEL | string | OpenAI 요약에 사용되는 모델입니다. | # OPENAI_SUMMARY_MODEL=gpt-3.5-turbo |
| OPENAI_FORCE_PROMPT | boolean | messages 페이로드 대신 prompt 페이로드를 사용하여 API를 호출하도록 강제합니다. | # OPENAI_FORCE_PROMPT=false |
| OPENAI_ORGANIZATION | string | OpenAI에 대한 각 API 요청에 사용할 조직을 지정합니다. 선택 사항입니다. | # OPENAI_ORGANIZATION= |
| OPENAI_REVERSE_PROXY | string | 사용 중단됨: OpenAI를 위한 리버스 프록시 설정. | # OPENAI_REVERSE_PROXY= |
| OPENAI_TITLE_MODEL | string | 사용 중단됨: OpenAI 제목 생성에 사용되는 모델입니다. | # OPENAI_TITLE_MODEL=gpt-3.5-turbo |
OPENAI_TITLE_MODEL은 이제 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. 대신librechat.yaml설정의titleModel엔드포인트 설정을 사용하세요.OPENAI_REVERSE_PROXY는 이제 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. 대신 custom endpoint를 사용하세요.
Assistants
참고: Assistants Setup
| Key | Type | Description | Example |
|---|---|---|---|
| ASSISTANTS_API_KEY | string | Assistants API를 위한 OpenAI API 키입니다. 이 엔드포인트를 비활성화하려면 비워두거나, 사용자가 WebUI에서 직접 API 키를 입력하도록 하려면 "user_provided"로 설정하세요. | ASSISTANTS_API_KEY=user_provided |
| ASSISTANTS_MODELS | string | 사용 가능한 모델을 쉼표로 구분하여 입력하세요(공백 없음). 첫 번째 모델이 기본값으로 설정됩니다. 내부 설정을 사용하려면 비워 두세요. | # ASSISTANTS_MODELS=gpt-3.5-turbo-0125,gpt-3.5-turbo-16k-0613,gpt-3.5-turbo-16k,gpt-3.5-turbo,gpt-4,gpt-4-0314,gpt-4-32k-0314,gpt-4-0613,gpt-3.5-turbo-0613,gpt-3.5-turbo-1106,gpt-4-0125-preview,gpt-4-turbo-preview,gpt-4-1106-preview |
| ASSISTANTS_BASE_URL | string | Assistants API를 위한 대체 base URL입니다. | # ASSISTANTS_BASE_URL= |
참고: 사용 가능한 모델을 쉼표로 구분하여 공백 없이 사용자 지정할 수 있습니다. 첫 번째 모델이 기본값으로 설정됩니다. 비워두거나 주석 처리하면 내부 설정을 사용합니다.
Tavily
다음에서 API 키를 받으세요: https://tavily.com/#api
환경 변수:
| Key | Type | Description | Example |
|---|---|---|---|
| TAVILY_API_KEY | string | Tavily API 키 | TAVILY_API_KEY= |
Traversaal
설명: LLM 강화 검색 도구.
API 키는 여기서 받으세요: https://api.traversaal.ai/dashboard
환경 변수:
| Key | Type | Description | Example |
|---|---|---|---|
| TRAVERSAAL_API_KEY | string | Traversaal API 키 | TRAVERSAAL_API_KEY= |
WolframAlpha
자세한 지침은 여기를 참조하세요: Wolfram Alpha
환경 변수:
| Key | Type | Description | Example |
|---|---|---|---|
| WOLFRAM_APP_ID | string | Wolfram Alpha App ID | WOLFRAM_APP_ID= |
Zapier
설명: - Zapier 계정이 필요합니다. 다음 링크에서 API 키를 받으세요: Zapier
- 허용된 작업 생성 - Zapier의 이 시작 가이드에서 3단계를 따르세요
참고: Zapier는 특정 작업에서 까다로운 것으로 알려져 있습니다. 이메일 초안 작성이 아마도 가장 적합한 활용 사례일 것입니다.
환경 변수:
| Key | Type | Description | Example |
|---|---|---|---|
| ZAPIER_NLA_API_KEY | string | Zapier NLA API 키 | ZAPIER_NLA_API_KEY= |
OpenWeather
자세한 지침은 여기를 참조하세요: OpenWeather
| Key | Type | Description | Example |
|---|---|---|---|
| OPENWEATHER_API_KEY | string | One Call API 3.0을 위한 OpenWeather API 키. | OPENWEATHER_API_KEY= |
Code Interpreter
Code Interpreter API는 코드를 실행하고 파일을 관리하기 위한 안전한 환경을 제공합니다. 참조: Code Interpreter API
| Key | Type | Description | Example |
|---|---|---|---|
| LIBRECHAT_CODE_API_KEY | string | Code Interpreter 서비스를 위한 API 키입니다. 전역으로 설정하면 모든 사용자에게 액세스 권한을 제공합니다. | LIBRECHAT_CODE_API_KEY=your-api-key |
| LIBRECHAT_CODE_BASEURL | string | Code Interpreter API를 위한 사용자 지정 기본 URL (Enterprise 플랜 전용). | # LIBRECHAT_CODE_BASEURL=https://your-custom-domain.com |
Artifacts
Artifacts는 HTML/JS 코드를 안전하게 렌더링하기 위해 CodeSandbox 라이브러리를 활용합니다. 기본적으로 CodeSandbox에서 호스팅하는 공개 CDN이 사용됩니다.
다행히도 내부 네트워크 요구 사항이 있는 경우, 프론트엔드 코드를 컴파일하는 번들러를 직접 호스팅하고 Sandpack을 위한 사용자 지정 번들러 URL을 지정할 수 있습니다.
메트릭 요청이 제거된 자가 호스팅용 사전 제작 컨테이너 이미지를 포함한 자세한 정보는 다음을 참조하세요: https://github.com/LibreChat-AI/codesandbox-client
| Key | Type | Description | Example |
|---|---|---|---|
| SANDPACK_BUNDLER_URL | string | Artifacts에서 사용하는 Sandpack용 사용자 지정 번들러 URL을 지정합니다 | SANDPACK_BUNDLER_URL=your-bundler-url |
검색 (Meilisearch)
메시지 및 대화 내 검색을 활성화합니다:
| Key | Type | Description | Example |
|---|---|---|---|
| SEARCH | boolean | 메시지 및 대화 검색을 활성화합니다. | SEARCH=true |
참고: Docker를 사용하지 않는 경우, 무료 자체 호스팅 Meilisearch 또는 유료 원격 플랜을 설치해야 합니다.
MeiliSearch에 대한 익명화된 원격 분석(telemetry) 분석을 완전히 비활성화하여 개인정보를 보호하려면, 다음을 true로 설정하세요:
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_NO_ANALYTICS | boolean | MeiliSearch에 대한 익명화된 원격 분석(telemetry) 분석을 비활성화합니다. | MEILI_NO_ANALYTICS=true |
API 서버가 검색 서버에 연결하기 위함입니다. Docker Compose로 MeiliSearch를 서비스하는 경우 '0.0.0.0'을 'meilisearch'로 교체하세요.
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_HOST | string | 검색 서버에 대한 API 서버 연결. | MEILI_HOST=http://0.0.0.0:7700 |
이 마스터 키는 최소 16바이트 이상이어야 하며, 유효한 UTF-8 문자로 구성되어야 합니다. 마스터 키가 제공되지 않거나 16바이트 미만일 경우 MeiliSearch는 오류를 발생시키며 실행을 거부합니다. MeiliSearch는 안전하게 자동 생성된 마스터 키를 제안할 것입니다. 이는 docker-compose를 위한 즉시 사용 가능한 보안 키이며, 사용자의 키로 교체할 수 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_MASTER_KEY | string | MeiliSearch를 위한 마스터 키입니다. | MEILI_MASTER_KEY=DrhYf7zENyR6AlUCKmnz0eYASOQdl6zxH7s7MKFSfFCt |
LibreChat이 Meilisearch와 데이터베이스 인덱싱 동기화를 시도하지 않도록 하려면, 다음 환경 변수를 true로 설정할 수 있습니다. 이는 하나의 인스턴스만 인덱싱을 담당해야 하는 노드 클러스터 또는 다중 노드 설정에서 유용합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_NO_SYNC | string | Meilisearch 인덱스 동기화 비활성화 토글 | MEILI_NO_SYNC=true |
RAG API
문서 인덱싱 및 문맥 인식 응답을 위한 Retrieval-Augmented Generation(RAG)을 구성하세요. 자세한 내용은 다음을 참조하세요: RAG API Configuration
| Key | Type | Description | Example |
|---|---|---|---|
| RAG_API_URL | string | RAG API 서비스의 URL입니다. | RAG_API_URL=http://host.docker.internal:8000 |
| RAG_OPENAI_API_KEY | string | RAG 임베딩을 위한 OpenAI API 키입니다. RAG에 대해 OPENAI_API_KEY를 재정의합니다. | # RAG_OPENAI_API_KEY=sk-your-openai-api-key |
| RAG_OPENAI_BASEURL | string | RAG 임베딩을 위한 사용자 지정 OpenAI 기본 URL입니다. | # RAG_OPENAI_BASEURL= |
| RAG_USE_FULL_CONTEXT | boolean | 상위 4개 결과 대신 전체 파일 컨텍스트를 가져옵니다. 기본값: false. | # RAG_USE_FULL_CONTEXT=true |
| EMBEDDINGS_PROVIDER | string | Embeddings provider: openai, azure, huggingface, huggingfacetei 또는 ollama. 기본값: openai. | # EMBEDDINGS_PROVIDER=openai |
| EMBEDDINGS_MODEL | string | 사용할 임베딩 모델입니다. 기본값은 제공업체에 따라 다릅니다. | # EMBEDDINGS_MODEL=text-embedding-3-small |
참고: 기본 Docker 설정을 사용할 때
.env파일은 LibreChat과 RAG API 간에 공유됩니다. 전체 구성 옵션은 RAG API 문서를 참조하세요.
음성 인식(Speech to Text) 및 음성 합성(Text to Speech)
Speech-to-Text (STT) 및 Text-to-Speech (TTS) 서비스를 구성합니다. 자세한 내용은 다음을 참조하세요: Speech Settings
| Key | Type | Description | Example |
|---|---|---|---|
| STT_API_KEY | string | Speech-to-Text 서비스를 위한 API 키 (예: OpenAI Whisper). | # STT_API_KEY= |
| TTS_API_KEY | string | Text-to-Speech 서비스를 위한 API 키 (예: OpenAI TTS) | # TTS_API_KEY= |
참고: STT 및 TTS는 주로
librechat.yaml의speech:섹션을 통해 구성됩니다. 이러한 환경 변수는 해당 구성에서 참조됩니다. 전체 YAML 구성 옵션은 Speech Settings를 참조하세요.
공유 링크
공유 대화 링크 기능을 구성합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| ALLOW_SHARED_LINKS | boolean | 공유 대화 링크를 활성화하거나 비활성화합니다. 기본값: true. | ALLOW_SHARED_LINKS=true |
| ALLOW_SHARED_LINKS_PUBLIC | boolean | 인증 없이 공유 링크에 공개적으로 액세스할 수 있도록 허용합니다. 기본값: false. | ALLOW_SHARED_LINKS_PUBLIC=false |
| SHARED_LINKS_SNAPSHOT_FILES | boolean | 공유된 채팅에서 참조하는 스냅샷 파일로, 뷰어가 공유 링크를 통해 이를 미리 보거나 다운로드할 수 있습니다. 설정 시 interface.sharedLinks.snapshotFiles를 재정의합니다. | SHARED_LINKS_SNAPSHOT_FILES=true |
ALLOW_SHARED_LINKS는 기능 전체에 대한 스위치입니다. 이제 역할 권한(Role permissions)을 통해 누가 공유 링크를 생성할 수 있는지, 인증된 사용자와 공유할 수 있는지, 또는 모든 사람에게 공개할 수 있는지 제어할 수 있습니다. interface.sharedLinks를 참조하세요. ALLOW_SHARED_LINKS_PUBLIC은 공개적으로 공유된 링크를 인증 없이 볼 수 있는지 여부만 제어합니다. SHARED_LINKS_SNAPSHOT_FILES는 공유 링크 파일 스냅샷에 대한 전역 재정의(global override)이며, false로 설정하면 모든 링크에 대해 스냅샷 제공을 비활성화할 수 있습니다.
사용자 시스템
이 섹션에는 다음을 위한 구성이 포함되어 있습니다:
중재 (Moderation)
자동화된 조정 시스템(Automated Moderation System)은 점수 매기기 메커니즘을 사용하여 사용자 위반 사항을 추적합니다. 사용자가 과도한 로그인, 등록 또는 메시지 전송과 같은 행동을 하면 위반 점수가 누적됩니다. 설정된 임계값에 도달하면 해당 사용자와 IP는 일시적으로 차단됩니다. 이 시스템은 급격하거나 의심스러운 활동을 모니터링하고 제재함으로써 플랫폼 보안을 보장합니다.
기본 조정 설정
| Key | Type | Description | Example |
|---|---|---|---|
| OPENAI_MODERATION | boolean | **OpenAI** 및 **Plugins** endpoint에서 OpenAI moderation을 활성화할지 여부입니다. | OPENAI_MODERATION=false |
| OPENAI_MODERATION_API_KEY | string | OpenAI API 키. | OPENAI_MODERATION_API_KEY= |
| OPENAI_MODERATION_REVERSE_PROXY | string | 참고: 기본적으로 주석 처리되어 있으며, 모든 리버스 프록시에서 작동하지 않을 수 있습니다. | # OPENAI_MODERATION_REVERSE_PROXY= |
차단 설정
| Key | Type | Description | Example |
|---|---|---|---|
| BAN_VIOLATIONS | boolean | 위반 사항에 대해 사용자 차단을 활성화할지 여부입니다(차단된 사용자도 로그에는 기록됩니다). | BAN_VIOLATIONS=true |
| BAN_DURATION | integer | 사용자 및 관련 IP가 차단되는 기간(밀리초 단위). | BAN_DURATION=1000 * 60 * 60 * 2 |
| BAN_INTERVAL | integer | 사용자의 점수가 간격 임계값에 도달하거나 초과할 때마다 사용자는 차단됩니다. | BAN_INTERVAL=20 |
로그인 및 등록 속도 제한
로그인 시도 및 신규 계정 등록 횟수를 제한하여 무차별 대입 공격(brute force attacks)과 스팸 등록을 방지합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| LOGIN_MAX | integer | LOGIN_WINDOW당 IP별로 허용되는 최대 로그인 횟수입니다. | LOGIN_MAX=7 |
| LOGIN_WINDOW | integer | LOGIN_MAX 로그인을 위한 시간 범위를 분 단위로 결정합니다. | LOGIN_WINDOW=5 |
| REGISTER_MAX | integer | REGISTER_WINDOW 당 IP별로 허용되는 최대 등록 횟수입니다. | REGISTER_MAX=5 |
| REGISTER_WINDOW | integer | REGISTER_MAX 등록을 위한 시간 범위를 분 단위로 결정합니다. | REGISTER_WINDOW=60 |
각 위반 사항에 대한 점수
| Key | Type | Description | Example |
|---|---|---|---|
| LOGIN_VIOLATION_SCORE | integer | 로그인 위반 점수. | LOGIN_VIOLATION_SCORE=1 |
| REGISTRATION_VIOLATION_SCORE | integer | 등록 위반에 대한 점수. | REGISTRATION_VIOLATION_SCORE=1 |
| CONCURRENT_VIOLATION_SCORE | integer | 동시 위반에 대한 점수. | CONCURRENT_VIOLATION_SCORE=1 |
| MESSAGE_VIOLATION_SCORE | integer | 메시지 위반 점수. | MESSAGE_VIOLATION_SCORE=1 |
| NON_BROWSER_VIOLATION_SCORE | integer | 브라우저 외 위반에 대한 점수. | NON_BROWSER_VIOLATION_SCORE=20 |
| ILLEGAL_MODEL_REQ_SCORE | integer | 비허용 모델 요청에 대한 점수. | ILLEGAL_MODEL_REQ_SCORE=5 |
| IMPORT_VIOLATION_SCORE | integer | 대화 가져오기 위반에 대한 점수. | IMPORT_VIOLATION_SCORE=1 |
| FORK_VIOLATION_SCORE | integer | 대화 분기 위반에 대한 점수. | FORK_VIOLATION_SCORE=1 |
| TTS_VIOLATION_SCORE | integer | 텍스트 음성 변환 위반 점수. | TTS_VIOLATION_SCORE=0 |
| STT_VIOLATION_SCORE | integer | 음성-텍스트 위반 점수. | STT_VIOLATION_SCORE=0 |
| FILE_UPLOAD_VIOLATION_SCORE | integer | 파일 업로드 위반에 대한 점수. | FILE_UPLOAD_VIOLATION_SCORE=0 |
| RESET_PASSWORD_VIOLATION_SCORE | integer | 비밀번호 재설정 위반 점수. | RESET_PASSWORD_VIOLATION_SCORE=0 |
| VERIFY_EMAIL_VIOLATION_SCORE | integer | 이메일 인증 위반에 대한 점수. | VERIFY_EMAIL_VIOLATION_SCORE=0 |
| TOOL_CALL_VIOLATION_SCORE | integer | 도구 호출 위반에 대한 점수. | TOOL_CALL_VIOLATION_SCORE=0 |
| CONVO_ACCESS_VIOLATION_SCORE | integer | 대화 접근 위반에 대한 점수. | CONVO_ACCESS_VIOLATION_SCORE=0 |
참고: 브라우저를 통하지 않은 접근 및 비정상적인 모델 요청은 거의 항상 악의적인 것으로 간주되는데, 이는 제3자가 자동화된 스크립트를 통해 서버에 접근하려고 시도하고 있음을 의미합니다.
메시지 속도 제한 (사용자 및 IP별)
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_CONCURRENT_MESSAGES | boolean | 사용자가 요청당 보낼 수 있는 메시지 양을 제한할지 여부입니다. | LIMIT_CONCURRENT_MESSAGES=true |
| CONCURRENT_MESSAGE_MAX | integer | 사용자가 요청당 보낼 수 있는 최대 메시지 수입니다. | CONCURRENT_MESSAGE_MAX=2 |
Limiters
참고: 두 제한기를 모두 활용할 수 있지만, 기본값은 IP로만 제한하는 것입니다.
IP Limiter:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_MESSAGE_IP | boolean | `MESSAGE_IP_WINDOW`당 IP가 보낼 수 있는 메시지 양을 제한할지 여부입니다. | LIMIT_MESSAGE_IP=true |
| MESSAGE_IP_MAX | integer | `MESSAGE_IP_WINDOW`당 하나의 IP가 보낼 수 있는 최대 메시지 수입니다. | MESSAGE_IP_MAX=40 |
| MESSAGE_IP_WINDOW | integer | `MESSAGE_IP_MAX` 메시지에 대한 시간 범위를 분 단위로 결정합니다. | MESSAGE_IP_WINDOW=1 |
사용자 제한기 (User Limiter):
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_MESSAGE_USER | boolean | `MESSAGE_USER_WINDOW`당 사용자가 보낼 수 있는 메시지 양을 제한할지 여부입니다. | LIMIT_MESSAGE_USER=false |
| MESSAGE_USER_MAX | integer | `MESSAGE_USER_WINDOW`당 사용자가 보낼 수 있는 최대 메시지 수입니다. | MESSAGE_USER_MAX=40 |
| MESSAGE_USER_WINDOW | integer | `MESSAGE_USER_MAX` 메시지에 대한 시간 범위를 분 단위로 결정합니다. | MESSAGE_USER_WINDOW=1 |
대화 가져오기 속도 제한(rate limiting)
사용자가 대화를 가져올 수 있는 빈도를 제한하여 남용을 방지합니다.
참고: 두 제한기를 모두 활용할 수 있지만, 기본값은 IP로만 제한하는 것입니다.
IP Limiter:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_IMPORT_IP | boolean | `IMPORT_IP_WINDOW`당 IP가 수행할 수 있는 대화 가져오기 횟수를 제한할지 여부입니다. | LIMIT_IMPORT_IP=true |
| IMPORT_IP_MAX | integer | `IMPORT_IP_WINDOW`당 하나의 IP가 수행할 수 있는 최대 대화 가져오기 횟수입니다. | IMPORT_IP_MAX=100 |
| IMPORT_IP_WINDOW | integer | `IMPORT_IP_MAX` 가져오기에 대한 시간 범위를 분 단위로 결정합니다. | IMPORT_IP_WINDOW=1 |
사용자 제한기 (User Limiter):
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_IMPORT_USER | boolean | `IMPORT_USER_WINDOW` 기간 동안 사용자가 수행할 수 있는 대화 가져오기 횟수를 제한할지 여부입니다. | LIMIT_IMPORT_USER=false |
| IMPORT_USER_MAX | integer | 사용자가 `IMPORT_USER_WINDOW` 기간 동안 수행할 수 있는 최대 대화 가져오기 횟수입니다. | IMPORT_USER_MAX=50 |
| IMPORT_USER_WINDOW | integer | `IMPORT_USER_MAX` 가져오기에 대한 시간 범위를 분 단위로 결정합니다. | IMPORT_USER_WINDOW=1 |
대화 포킹(forking) 속도 제한
사용자가 대화를 포크(fork)할 수 있는 빈도를 제한하여 남용을 방지합니다.
참고: 두 제한기를 모두 활용할 수 있지만, 기본값은 IP로만 제한하는 것입니다.
IP Limiter:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_FORK_IP | boolean | `FORK_IP_WINDOW`당 IP 하나가 생성할 수 있는 대화 포크 수를 제한할지 여부입니다. | LIMIT_FORK_IP=true |
| FORK_IP_MAX | integer | `FORK_IP_WINDOW`당 하나의 IP가 생성할 수 있는 최대 대화 포크 수입니다. | FORK_IP_MAX=30 |
| FORK_IP_WINDOW | integer | `FORK_IP_MAX` 포크에 대한 시간 범위를 분 단위로 결정합니다. | FORK_IP_WINDOW=1 |
사용자 제한기 (User Limiter):
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_FORK_USER | boolean | `FORK_USER_WINDOW`당 사용자가 생성할 수 있는 대화 분기(fork) 수를 제한할지 여부입니다. | LIMIT_FORK_USER=false |
| FORK_USER_MAX | integer | `FORK_USER_WINDOW`당 사용자가 생성할 수 있는 최대 대화 포크 수입니다. | FORK_USER_MAX=7 |
| FORK_USER_WINDOW | integer | `FORK_USER_MAX` 포크에 대한 시간 범위를 분 단위로 결정합니다. | FORK_USER_WINDOW=1 |
파일 업로드 속도 제한
사용자가 파일을 업로드할 수 있는 빈도를 제한하여 남용을 방지합니다.
참고: 이 설정은
librechat.yaml의rateLimits.fileUploads섹션을 통해서도 구성할 수 있습니다.
IP Limiter:
| Key | Type | Description | Example |
|---|---|---|---|
| FILE_UPLOAD_IP_MAX | integer | `FILE_UPLOAD_IP_WINDOW`당 IP별 최대 파일 업로드 횟수입니다. 기본값: 100. | # FILE_UPLOAD_IP_MAX=100 |
| FILE_UPLOAD_IP_WINDOW | integer | `FILE_UPLOAD_IP_MAX`에 대한 시간 범위를 분 단위로 결정합니다. 기본값: 15. | # FILE_UPLOAD_IP_WINDOW=15 |
사용자 제한기 (User Limiter):
| Key | Type | Description | Example |
|---|---|---|---|
| FILE_UPLOAD_USER_MAX | integer | `FILE_UPLOAD_USER_WINDOW`당 사용자별 최대 파일 업로드 수. 기본값: 50. | # FILE_UPLOAD_USER_MAX=50 |
| FILE_UPLOAD_USER_WINDOW | integer | `FILE_UPLOAD_USER_MAX`에 대한 시간 범위를 분 단위로 결정합니다. 기본값: 15. | # FILE_UPLOAD_USER_WINDOW=15 |
TTS (Text-to-Speech) 속도 제한
사용자가 남용을 방지하기 위해 텍스트 음성 변환(Text-to-Speech)을 사용할 수 있는 빈도를 제한합니다.
참고: 이 설정은
librechat.yaml의rateLimits.tts섹션을 통해서도 구성할 수 있습니다.
IP Limiter:
| Key | Type | Description | Example |
|---|---|---|---|
| TTS_IP_MAX | integer | `TTS_IP_WINDOW`당 IP별 최대 TTS 요청 수. 기본값: 100. | # TTS_IP_MAX=100 |
| TTS_IP_WINDOW | integer | `TTS_IP_MAX`에 대한 시간 창을 분 단위로 결정합니다. 기본값: 1. | # TTS_IP_WINDOW=1 |
사용자 제한기 (User Limiter):
| Key | Type | Description | Example |
|---|---|---|---|
| TTS_USER_MAX | integer | `TTS_USER_WINDOW`당 사용자별 최대 TTS 요청 수. 기본값: 50. | # TTS_USER_MAX=50 |
| TTS_USER_WINDOW | integer | 분 단위로 `TTS_USER_MAX`의 시간 범위를 결정합니다. 기본값: 1. | # TTS_USER_WINDOW=1 |
STT (Speech-to-Text) 속도 제한
사용자가 음성 인식(Speech-to-Text) 기능을 남용하지 못하도록 사용 빈도를 제한합니다.
참고: 이 설정은
librechat.yaml의rateLimits.stt섹션을 통해서도 구성할 수 있습니다.
IP Limiter:
| Key | Type | Description | Example |
|---|---|---|---|
| STT_IP_MAX | integer | `STT_IP_WINDOW`당 IP별 최대 STT 요청 수. 기본값: 100. | # STT_IP_MAX=100 |
| STT_IP_WINDOW | integer | `STT_IP_MAX`에 대한 시간 창을 분 단위로 결정합니다. 기본값: 1. | # STT_IP_WINDOW=1 |
사용자 제한기 (User Limiter):
| Key | Type | Description | Example |
|---|---|---|---|
| STT_USER_MAX | integer | `STT_USER_WINDOW`당 사용자별 최대 STT 요청 수. 기본값: 50. | # STT_USER_MAX=50 |
| STT_USER_WINDOW | integer | `STT_USER_MAX`의 시간 범위를 분 단위로 결정합니다. 기본값: 1. | # STT_USER_WINDOW=1 |
잔액
다음 기능은 시스템의 endpoint 내에서 사용자 잔액을 관리할 수 있게 해줍니다. 잔액을 수동으로 추가하거나, 사용자를 위해 자동으로 잔액을 누적하는 시스템을 구현할 수 있습니다. 구성에서 특정 초기 잔액이 정의된 경우, 사용자가 등록할 때 토큰이 사용자 잔액으로 자동 적립됩니다.
참고: Token Usage
| Key | Type | Description | Example |
|---|---|---|---|
| CHECK_BALANCE | boolean | OpenAI/Plugins endpoint에 대한 토큰 크레딧 잔액을 활성화합니다. | CHECK_BALANCE=false |
| START_BALANCE | integer | 값이 설정되면, 등록 후 사용자 잔액에 토큰이 적립됩니다. | START_BALANCE=20000 |
잔액 관리
npm run add-balance를 실행하여 잔액을 수동으로 추가하세요.- 또한 이메일과 추가할 토큰 크레딧 금액을 지정할 수도 있습니다. 예:
npm run add-balance [email protected] 1000
- 또한 이메일과 추가할 토큰 크레딧 금액을 지정할 수도 있습니다. 예:
npm run set-balance를 실행하여add-balance와 유사하게 잔액을 수동으로 설정합니다.npm run list-balances를 실행하여 모든 사용자의 잔액을 확인하세요.
참고: 1000 크레딧 = $0.001 (0.1 센트 USD)
등록 및 로그인
구성 파일 설명
이 섹션의 모든 인증 설정은 librechat.yaml 파일이나 docker-compose.override.yml 파일이 아닌 .env 파일에서 구성해야 합니다. docker-compose.override.yml 파일은 볼륨을 마운트하고 Docker용 환경 변수를 설정하는 데에만 사용되며, librechat.yaml 파일은 사용자 지정 endpoint 및 기타 애플리케이션 설정을 위해 사용됩니다.
- 일반 설정:
| Key | Type | Description | Example |
|---|---|---|---|
| ALLOW_EMAIL_LOGIN | boolean | 이메일 로그인만 활성화 또는 비활성화합니다. | ALLOW_EMAIL_LOGIN=true |
| ALLOW_REGISTRATION | boolean | 새 사용자의 이메일 등록을 활성화하거나 비활성화합니다. | ALLOW_REGISTRATION=true |
| ALLOW_SOCIAL_LOGIN | boolean | 사용자가 다양한 소셜 네트워크를 통해 LibreChat에 연결할 수 있도록 허용합니다. | ALLOW_SOCIAL_LOGIN=false |
| ALLOW_SOCIAL_REGISTRATION | boolean | 다양한 소셜 네트워크를 사용하여 새 사용자 등록을 활성화하거나 비활성화합니다. | ALLOW_SOCIAL_REGISTRATION=false |
| ALLOW_PASSWORD_RESET | boolean | 사용자가 직접 비밀번호를 재설정할 수 있는 기능을 활성화하거나 비활성화합니다 | ALLOW_PASSWORD_RESET=false |
| ALLOW_ACCOUNT_DELETION | boolean | 사용자가 직접 자신의 계정을 삭제할 수 있는 기능을 활성화하거나 비활성화합니다. 생략하거나 주석 처리할 경우 기본적으로 활성화됩니다. | ALLOW_ACCOUNT_DELETION=true |
| ALLOW_UNVERIFIED_EMAIL_LOGIN | boolean | 사용자가 이메일 주소를 인증하지 않고 로그인할 수 있도록 하려면 true로 설정하세요. false로 설정하면 사용자가 로그인하기 전에 이메일을 인증해야 합니다. | ALLOW_UNVERIFIED_EMAIL_LOGIN=true |
| MIN_PASSWORD_LENGTH | number | 사용자 인증을 위한 최소 비밀번호 길이입니다. LDAP 인증을 사용하는 경우, LDAP 서버가 자체적인 비밀번호 정책을 처리하므로 로컬 비밀번호 유효성 검사를 우회하기 위해 이 값을 1로 설정할 수 있습니다. | MIN_PASSWORD_LENGTH=8 |
빠른 팁: 등록 기능이 비활성화된 경우에도
npm run create-user를 사용하여 데이터베이스에 사용자를 직접 추가할 수 있습니다.
빠른 팁: 등록 기능이 비활성화된 경우
npm run delete-user [email protected]을 사용하여 사용자를 삭제할 수 있습니다.
- 세션 및 리프레시 토큰 설정:
| Key | Type | Description | Example |
|---|---|---|---|
| SESSION_EXPIRY | integer (milliseconds) | 세션 만료 시간. | SESSION_EXPIRY=1000 * 60 * 15 |
| REFRESH_TOKEN_EXPIRY | integer (milliseconds) | 리프레시 토큰 만료 시간. | REFRESH_TOKEN_EXPIRY=(1000 * 60 * 60 * 24) * 7 |
| SESSION_COOKIE_SECURE | boolean | 세션/인증 쿠키의 Secure 속성을 재정의합니다. 설정하지 않으면 기본 NODE_ENV/DOMAIN_SERVER 휴리스틱을 사용합니다. | # SESSION_COOKIE_SECURE=false |
-
더 많은 정보는 다음을 참조하세요: Refresh Token
-
JWT 설정:
새롭고 안전한 값을 사용해야 합니다. 제공된 예시는 32바이트 키(16진수 64자)입니다. 다음 replit을 사용하여 빠르게 생성할 수 있습니다: JWT Keys
| Key | Type | Description | Example |
|---|---|---|---|
| JWT_SECRET | string (hex) | JWT 비밀 키. | JWT_SECRET=16f8c0ef4a5d391b26034086c628469d3f9f497f08163ab9b40137092f2909ef |
| JWT_REFRESH_SECRET | string (hex) | JWT 리프레시 비밀 키. | JWT_REFRESH_SECRET=eaa5191f2914e30b9387fd84e254e4ba6fc51b4654968a9b0803b456a54b8418 |
소셜 로그인
더 자세한 내용은 다음을 참조하세요: OAuth2-OIDC
Apple 인증
더 자세한 정보는 다음을 참조하세요: Apple Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| APPLE_CLIENT_ID | string | Apple 서비스 ID (예: com.yourdomain.librechat.services) | APPLE_CLIENT_ID=com.yourdomain.librechat.services |
| APPLE_TEAM_ID | string | Apple Developer Team ID. | APPLE_TEAM_ID=YOUR_TEAM_ID |
| APPLE_KEY_ID | string | 다운로드한 키에서 확인한 Apple Key ID입니다. | APPLE_KEY_ID=YOUR_KEY_ID |
| APPLE_PRIVATE_KEY_PATH | string | 다운로드한 .p8 파일의 절대 경로입니다. | APPLE_PRIVATE_KEY_PATH=/path/to/AuthKey.p8 |
| APPLE_CALLBACK_URL | string | Apple 인증을 위한 콜백 URL입니다. | APPLE_CALLBACK_URL=/oauth/apple/callback |
Discord 인증
더 많은 정보를 원하시면: Discord
| Key | Type | Description | Example |
|---|---|---|---|
| DISCORD_CLIENT_ID | string | Discord 클라이언트 ID입니다. | DISCORD_CLIENT_ID= |
| DISCORD_CLIENT_SECRET | string | Discord 클라이언트 시크릿입니다. | DISCORD_CLIENT_SECRET= |
| DISCORD_CALLBACK_URL | string | Discord 인증을 위한 콜백 URL입니다. | DISCORD_CALLBACK_URL=/oauth/discord/callback |
Facebook 인증
더 자세한 정보는 다음을 참조하세요: Facebook Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| FACEBOOK_CLIENT_ID | string | Facebook 클라이언트 ID. | FACEBOOK_CLIENT_ID= |
| FACEBOOK_CLIENT_SECRET | string | Facebook 클라이언트 시크릿입니다. | FACEBOOK_CLIENT_SECRET= |
| FACEBOOK_CALLBACK_URL | string | Facebook 인증을 위한 콜백 URL입니다. | FACEBOOK_CALLBACK_URL=/oauth/facebook/callback |
GitHub 인증
더 자세한 정보는 다음을 참조하세요: GitHub Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| GITHUB_CLIENT_ID | string | GitHub 클라이언트 ID. | GITHUB_CLIENT_ID= |
| GITHUB_CLIENT_SECRET | string | GitHub 클라이언트 시크릿입니다. | GITHUB_CLIENT_SECRET= |
| GITHUB_CALLBACK_URL | string | GitHub 인증을 위한 콜백 URL입니다. | GITHUB_CALLBACK_URL=/oauth/github/callback |
| GITHUB_ENTERPRISE_BASE_URL | string | 선택 사항: GitHub Enterprise 인스턴스의 기본 URL입니다. | GITHUB_ENTERPRISE_BASE_URL= |
| GITHUB_ENTERPRISE_USER_AGENT | string | 선택 사항: GitHub Enterprise 요청을 위한 사용자 에이전트입니다. | GITHUB_ENTERPRISE_USER_AGENT= |
Google 인증
더 많은 정보를 원하시면: Google Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| GOOGLE_CLIENT_ID | string | 귀하의 Google 클라이언트 ID. | GOOGLE_CLIENT_ID= |
| GOOGLE_CLIENT_SECRET | string | Google 클라이언트 보안 비밀(client secret)입니다. | GOOGLE_CLIENT_SECRET= |
| GOOGLE_CALLBACK_URL | string | Google 인증을 위한 콜백 URL입니다. | GOOGLE_CALLBACK_URL=/oauth/google/callback |
OpenID Connect
더 많은 정보는 다음을 참조하세요:
| Key | Type | Description | Example |
|---|---|---|---|
| OPENID_CLIENT_ID | string | 귀하의 OpenID 클라이언트 ID입니다. | OPENID_CLIENT_ID= |
| OPENID_CLIENT_SECRET | string | OpenID 클라이언트 시크릿입니다. | OPENID_CLIENT_SECRET= |
| OPENID_ISSUER | string | OpenID 발급자 URL입니다. | OPENID_ISSUER= |
| OPENID_SESSION_SECRET | string | OpenID 세션 저장을 위한 비밀 키입니다. | OPENID_SESSION_SECRET= |
| OPENID_SCOPE | string | OpenID scope. | OPENID_SCOPE="openid profile email" |
| OPENID_CALLBACK_URL | string | OpenID 인증을 위한 콜백 URL입니다. | OPENID_CALLBACK_URL=/oauth/openid/callback |
| OPENID_AUDIENCE | string | OpenID JWT 검증 및 권한 부여 요청을 위한 Audience 값입니다. JWT 검증 시 쉼표로 구분된 값을 사용할 수 있으며, 권한 부여 요청 시에는 비어 있지 않은 첫 번째 값을 사용합니다. OPENID_REUSE_TOKENS=true 설정 시 불투명 토큰 대신 JWT 액세스 토큰을 받기 위해 Auth0에서 필수적으로 요구됩니다. | OPENID_AUDIENCE=https://api.librechat.com |
| OPENID_REQUIRED_ROLE | string | 검증에 필요한 역할입니다. 단일 역할 또는 쉼표로 구분된 여러 역할을 지원합니다. 여러 역할을 지정할 경우, 사용자는 지정된 역할 중 하나라도 충족해야 합니다(OR 논리). | OPENID_REQUIRED_ROLE=admin or OPENID_REQUIRED_ROLE=role1,role2,admin |
| OPENID_REQUIRED_ROLE_TOKEN_KIND | string | 필수 역할 검증을 위한 토큰 종류입니다. | OPENID_REQUIRED_ROLE_TOKEN_KIND= |
| OPENID_REQUIRED_ROLE_PARAMETER_PATH | string | 필수 역할 검증을 위한 매개변수 경로입니다. | OPENID_REQUIRED_ROLE_PARAMETER_PATH= |
| OPENID_ADMIN_ROLE | string | LibreChat에서 관리자가 되기 위해 사용자가 가져야 하는 역할. | OPENID_ADMIN_ROLE= |
| OPENID_ADMIN_ROLE_TOKEN_KIND | string | 관리자 역할 확인을 위한 정보 소스입니다. 가능한 값은 access, id 또는 userinfo입니다. | OPENID_ADMIN_ROLE_TOKEN_KIND= |
| OPENID_ADMIN_ROLE_PARAMETER_PATH | string | 필수 역할 검증을 위한 매개변수 경로입니다. | OPENID_ADMIN_ROLE_PARAMETER_PATH= |
| OPENID_ROLE_SYNC_ENABLED | boolean | 관리자 권한이 아닌 역할에 대해 일반 OpenID 역할 동기화를 활성화합니다. ADMIN은 역할 동기화로 할당할 수 없으며, 관리자 권한 상승을 위해서는 OPENID_ADMIN_ROLE을 사용하세요. | OPENID_ROLE_SYNC_ENABLED=false |
| OPENID_ROLE_SYNC_API_ENABLED | boolean | API 기반 역할 동기화 도우미를 활성화합니다. OPENID_ROLE_SYNC_ENABLED=true 설정이 필요합니다. | OPENID_ROLE_SYNC_API_ENABLED=false |
| OPENID_ROLE_SYNC_SOURCE | string | 역할 클레임에 대한 토큰 소스입니다. access, id, userinfo 중 하나여야 합니다. 기본값: id. | OPENID_ROLE_SYNC_SOURCE=id |
| OPENID_ROLE_SYNC_CLAIM | string | 공급자 역할 또는 그룹을 포함하는 클레임 경로입니다. 역할 동기화가 활성화된 경우 필수입니다. | OPENID_ROLE_SYNC_CLAIM= |
| OPENID_ROLE_SYNC_ROLE_PRIORITY | string | 가장 중요한 역할부터 덜 중요한 역할 순으로 나열된 쉼표로 구분된 LibreChat 역할입니다. 첫 번째로 일치하는 역할이 할당됩니다. | OPENID_ROLE_SYNC_ROLE_PRIORITY=Support,User |
| OPENID_ROLE_SYNC_FALLBACK_ROLE | string | 우선순위 역할이 일치하지 않을 때 할당되는 LibreChat 역할입니다. 설정된 경우 대체(fallback) 역할이 우선합니다. | OPENID_ROLE_SYNC_FALLBACK_ROLE=USER |
| OPENID_BUTTON_LABEL | string | OpenID 로그인 버튼의 라벨입니다. | OPENID_BUTTON_LABEL= |
| OPENID_IMAGE_URL | string | OpenID 로그인 버튼 이미지의 URL입니다. | OPENID_IMAGE_URL= |
| OPENID_USE_END_SESSION_ENDPOINT | string | 로그아웃 리다이렉트로 Issuer End Session Endpoint를 사용할지 여부 | OPENID_USE_END_SESSION_ENDPOINT=TRUE |
| OPENID_MAX_LOGOUT_URL_LENGTH | number | id_token_hint 대신 logout_hint를 사용하기 전의 최대 로그아웃 URL 길이입니다. 기본값: 2000. | # OPENID_MAX_LOGOUT_URL_LENGTH=2000 |
| OPENID_AUTO_REDIRECT | boolean | OpenID 제공업체로 자동으로 리디렉션할지 여부입니다. | OPENID_AUTO_REDIRECT=true |
| OPENID_USE_PKCE | boolean | OpenID 인증에 PKCE(Proof Key for Code Exchange)를 사용합니다. 클라이언트 시크릿이 없는 퍼블릭 클라이언트의 경우, OPENID_CLIENT_SECRET을 비워두고 이 값을 true로 설정하세요. | # OPENID_USE_PKCE=true |
| OPENID_POST_LOGOUT_REDIRECT_URI | string | OpenID 로그아웃 후 리디렉션 URI입니다. 기본값은 ${DOMAIN_CLIENT}/login입니다. | # OPENID_POST_LOGOUT_REDIRECT_URI= |
| OPENID_CLOCK_TOLERANCE | number | 토큰 유효성 검사를 위한 초 단위의 클록 허용 오차입니다. 기본값: 300. | # OPENID_CLOCK_TOLERANCE=300 |
| OPENID_GENERATE_NONCE | boolean | OpenID 클라이언트가 nonce 매개변수를 생성하도록 강제합니다. AWS Cognito(특히 페더레이션 사용 시) 및 Authentik과 같은 일부 ID 공급자에서 필요합니다. | OPENID_GENERATE_NONCE=true |
| DEBUG_OPENID_REQUESTS | boolean | OpenID 요청 헤더의 상세 로깅을 활성화합니다. 비활성화 시(기본값), 디버그 수준에서 요청 URL만 로깅됩니다. 활성화 시, 인증 문제의 심층적인 디버깅을 위해 요청 헤더도 함께 로깅됩니다(민감한 데이터는 마스킹 처리됨). | DEBUG_OPENID_REQUESTS=false |
| OPENID_USERNAME_CLAIM | string | 사용자의 사용자 이름으로 저장할 OpenID 제공자의 user info 속성입니다. | OPENID_USERNAME_CLAIM= |
| OPENID_NAME_CLAIM | string | 사용자의 표시 이름으로 저장할 OpenID 제공업체의 사용자 정보 속성입니다. | OPENID_NAME_CLAIM= |
| OPENID_EMAIL_CLAIM | string | 사용자 일치 식별자로 사용할 사용자 정보 클레임입니다(예: Entra ID의 경우 "upn"). 설정하지 않을 경우 기본값은 email → preferred_username → upn 순으로 적용됩니다. | OPENID_EMAIL_CLAIM= |
OpenID 역할 동기화
OPENID_ROLE_SYNC_CLAIM은 역할 동기화가 활성화된 경우 필수입니다.
OPENID_ROLE_SYNC_API_ENABLED=true를 사용하려면 OPENID_ROLE_SYNC_ENABLED=true도 필요합니다. 일반 역할 동기화로는 ADMIN을 할당할 수 없으므로, 관리자 권한 상승을 위해서는 OPENID_ADMIN_ROLE을 사용하세요.
OpenID Connect 토큰 재사용
LibreChat은 사용자 인증 상태를 관리하기 위해 OpenID Connect 공급자(Azure Entra ID 또는 Auth0 등)가 발급한 액세스 및 새로 고침 토큰 재사용을 지원합니다. 이 기능이 활성화되면, 쿠키로 사용자에게 전달되는 새로 고침 토큰은 LibreChat이 아닌 귀하의 OpenID 공급자가 발급합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| OPENID_REUSE_TOKENS | boolean | 세션 관리를 위해 OpenID 공급자 토큰 재사용을 활성화합니다. | OPENID_REUSE_TOKENS=false |
| OPENID_SCOPE | string | 공백으로 구분된 OpenID 스코프 목록입니다. 토큰 재사용을 위해 offline_access를 반드시 포함해야 합니다. | OPENID_SCOPE=api://librechat/.default openid profile email offline_access |
| OPENID_AUDIENCE | string | OpenID JWT 검증 및 인증 요청을 위한 Audience 값입니다. JWT 검증 시 쉼표로 구분된 값을 사용할 수 있으며, 인증 요청 시에는 비어 있지 않은 첫 번째 값을 사용합니다. OPENID_REUSE_TOKENS=true일 때 Auth0에 필요합니다. 위의 주요 OpenID 섹션에 있는 참고 사항을 확인하세요. | OPENID_AUDIENCE=https://api.librechat.com |
| OPENID_REUSE_MAX_SESSION_AGE_MS | number | LibreChat가 IdP 새로 고침을 강제하기 전까지 재사용된 OpenID 세션 토큰이 제공되는 최대 시간입니다. 기본값: 900000 ms / 15분. | OPENID_REUSE_MAX_SESSION_AGE_MS=900000 |
| OPENID_JWKS_URL_CACHE_ENABLED | boolean | 서명 키 검증 결과 캐싱을 활성화합니다. | OPENID_JWKS_URL_CACHE_ENABLED=true |
| OPENID_JWKS_URL_CACHE_TIME | number | 밀리초 단위의 캐시 지속 시간 (기본값: 600000 ms / 10분). | OPENID_JWKS_URL_CACHE_TIME=600000 |
| OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED | boolean | 사용자 정보를 위한 on-behalf-of 흐름을 활성화합니다. | OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true |
| OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE | string | on-behalf-of 흐름에서의 사용자 정보 범위. | OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE=user.read |
| OPENID_USE_END_SESSION_ENDPOINT | boolean | 로그아웃을 위해 end session endpoint 사용을 활성화합니다. | OPENID_USE_END_SESSION_ENDPOINT=true |
| OPENID_MAX_LOGOUT_URL_LENGTH | number | logout_hint로 전환하기 전의 최대 로그아웃 URL 길이(문자 수)입니다. id_token_hint가 서버 제한을 초과할 때 발생하는 URI too long 오류를 방지하는 데 유용합니다. 기본값: 2000. | OPENID_MAX_LOGOUT_URL_LENGTH=2000 |
OPENID_REUSE_MAX_SESSION_AGE_MS는 SESSION_EXPIRY와 같은 산술 표현식을 허용합니다. 공급자가 갱신 시 이전 액세스 토큰을 취소하는 경우, MCP 서버와 같은 다운스트림 소비자가 여전히 유효한 베어러 토큰을 계속 사용할 수 있도록 이 값을 IdP 액세스 토큰 수명에 가깝게 늘리십시오.
참고
자세한 구성 단계 및 필수 조건은 Re-use OpenID Tokens for Login Session을 참조하세요.
Microsoft Graph API / Entra ID 통합
Azure Entra ID(이전 명칭 Azure AD)를 OpenID 공급자로 사용할 때, 권한 및 공유 시스템 내에서 향상된 사용자 및 그룹 검색 기능을 위해 추가적인 Microsoft Graph API 기능을 활성화할 수 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| USE_ENTRA_ID_FOR_PEOPLE_SEARCH | boolean | 권한/공유 시스템에서 Entra ID 사용자 검색 통합을 활성화합니다. 활성화되면 사용자 선택기(people picker)가 로컬 데이터베이스와 Entra ID를 모두 검색합니다. | USE_ENTRA_ID_FOR_PEOPLE_SEARCH=false |
| ENTRA_ID_INCLUDE_OWNERS_AS_MEMBERS | boolean | 활성화되면 Entra ID 그룹 소유자가 해당 그룹의 구성원으로 간주됩니다. | ENTRA_ID_INCLUDE_OWNERS_AS_MEMBERS=false |
| OPENID_GRAPH_SCOPES | string | 사람/그룹 검색에 필요한 Microsoft Graph API 범위입니다. 기본 범위는 사용자 프로필 및 그룹 멤버십에 대한 액세스 권한을 제공합니다. | OPENID_GRAPH_SCOPES=User.Read,People.Read,GroupMember.Read.All,User.ReadBasic.All |
중요한 사전 요구 사항
- Azure Entra ID가 OpenID 제공업체로 구성되어 있어야 합니다. - OpenID 토큰 재사용이 활성화되어 있어야 합니다 (
OPENID_REUSE_TOKENS=true). 이 기능은 해당 설정 없이는 작동하지 않습니다. - Azure 앱 등록에 적절한 Microsoft Graph API 권한이 있어야 합니다. - 그룹 검색 기능을 사용하려면 특정 Graph API 범위에 대해 관리자 동의가 필요할 수 있습니다.
SharePoint 통합
LibreChat은 SharePoint Online 및 OneDrive for Business와의 직접적인 통합을 지원하여, 사용자가 대화 내에서 SharePoint 라이브러리의 파일을 직접 선택하고 첨부할 수 있도록 합니다. 이 엔터프라이즈 기능은 기존 Azure Entra ID 인증을 활용합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| ENABLE_SHAREPOINT_FILEPICKER | boolean | 채팅 및 에이전트 패널에서 SharePoint 파일 선택기를 활성화합니다. 활성화 시 파일 첨부 메뉴에 "SharePoint에서 가져오기" 옵션이 추가됩니다. | ENABLE_SHAREPOINT_FILEPICKER=true |
| SHAREPOINT_BASE_URL | string | SharePoint 테넌트 기본 URL. SharePoint 통합이 활성화된 경우 필수입니다. | SHAREPOINT_BASE_URL=https://yourtenant.sharepoint.com |
| SHAREPOINT_PICKER_SHAREPOINT_SCOPE | string | 파일 선택기를 위한 SharePoint 전용 OAuth 범위입니다. SharePoint 파일 선택기 인터페이스를 열 때 인증을 위해 사용됩니다. | SHAREPOINT_PICKER_SHAREPOINT_SCOPE=https://yourtenant.sharepoint.com/AllSites.Read |
| SHAREPOINT_PICKER_GRAPH_SCOPE | string | 파일 다운로드를 위한 Microsoft Graph API 범위입니다. 선택 후 SharePoint에서 파일을 다운로드하는 데 사용됩니다. | SHAREPOINT_PICKER_GRAPH_SCOPE=Files.Read.All |
필수 요구 사항
SharePoint 통합이 작동하려면 다음 사항을 모두 구성해야 합니다:
- Azure Entra ID 인증이 완전히 구성되어야 합니다.
OPENID_REUSE_TOKENS=true설정은 필수입니다 (on-behalf-of 토큰 흐름을 사용합니다)OPENID_SCOPE에는 LibreChat 앱 API 스코프가 포함되어야 합니다. 예:api://<client-id>/access_as_user- Azure Entra ID에서 해당 app-audience 범위를 사용할 때는
OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true설정이 필요합니다. - Azure 앱 등록에는 SharePoint 및 Graph API 권한이 있어야 합니다.
- Azure 앱 등록은
OPENID_SCOPE에 사용된 LibreChat API 범위를 노출해야 합니다. - 4개의 SharePoint 환경 변수를 모두 설정해야 합니다.
- 운영 환경에서는 HTTPS가 필수입니다.
기능 역량
활성화되면 사용자는 다음을 수행할 수 있습니다:
- SharePoint 문서 라이브러리 및 OneDrive for Business에서 파일 액세스
- 한 번에 여러 파일 선택 (기본 최대값: 10개 파일)
- 실시간 다운로드 진행 상황 확인
- 파일은 일반 업로드와 마찬가지로 다운로드되어 대화에 첨부됩니다.
자세한 SharePoint 구성 지침은 다음을 참조하세요: SharePoint Integration Guide
SAML
더 많은 정보는 다음을 참조하세요:
OpenID와 SAML의 상호 배타성
OpenID가 활성화되면 SAML 인증은 자동으로 비활성화됩니다.
한 번에 하나의 인증 방법만 활성화할 수 있습니다.
| Key | Type | Description | Example |
|---|---|---|---|
| SAML_ENTRY_POINT | string | SAML ID 공급자(IdP) 진입점 URL. | SAML_ENTRY_POINT= |
| SAML_ISSUER | string | SAML 서비스 공급자(SP) 엔티티 ID. | SAML_ISSUER= |
| SAML_CERT | string | 파일 경로 또는 한 줄짜리 PEM 문자열로 제공되는 SAML 서명 인증서입니다. | SAML_CERT= |
| SAML_CALLBACK_URL | string | SAML 인증을 위한 콜백 URL입니다. | SAML_CALLBACK_URL=/oauth/saml/callback |
| SAML_SESSION_SECRET | string | SAML 세션 저장을 위한 시크릿입니다. | SAML_SESSION_SECRET= |
| SAML_EMAIL_CLAIM | string | <Optional>: SAML 어설션에서 사용자 이메일을 포함하는 속성입니다. (기본값: email) | SAML_EMAIL_CLAIM= |
| SAML_USERNAME_CLAIM | string | <Optional>: SAML 어설션에서 사용자 이름을 포함하는 속성입니다. (기본값: username) | SAML_USERNAME_CLAIM= |
| SAML_GIVEN_NAME_CLAIM | string | <Optional>: SAML 어설션에서 이름을 포함하는 속성입니다. (기본값: given_name) | SAML_GIVEN_NAME_CLAIM= |
| SAML_FAMILY_NAME_CLAIM | string | <Optional>: SAML 어설션에서 성(family name)을 포함하는 속성입니다. (기본값: family_name) | SAML_FAMILY_NAME_CLAIM= |
| SAML_PICTURE_CLAIM | string | <Optional>: SAML 어설션에서 프로필 사진 URL을 포함하는 속성입니다. (기본값: picture) | SAML_PICTURE_CLAIM= |
| SAML_NAME_CLAIM | string | <Optional>: 전체 이름이 포함된 SAML 어설션 내 속성입니다. | SAML_NAME_CLAIM= |
| SAML_BUTTON_LABEL | string | <Optional>: SAML 로그인 버튼의 라벨입니다. | SAML_BUTTON_LABEL= |
| SAML_IMAGE_URL | string | <Optional>: SAML 로그인 버튼 이미지의 URL입니다. | SAML_IMAGE_URL= |
| SAML_USE_AUTHN_RESPONSE_SIGNED | boolean | <Optional>: "true"인 경우 전체 SAML Response에 서명합니다. 그렇지 않으면 Assertion에만 서명합니다(기본값). | SAML_USE_AUTHN_RESPONSE_SIGNED= |
LDAP/AD 인증
더 자세한 정보는 다음을 참조하세요: LDAP/AD Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| LDAP_URL | string | LDAP 서버 URL. | LDAP_URL=ldap://localhost:389 |
| LDAP_BIND_DN | string | Bind DN | LDAP_BIND_DN=cn=root |
| LDAP_BIND_CREDENTIALS | string | bindDN용 비밀번호 | LDAP_BIND_CREDENTIALS=password |
| LDAP_USER_SEARCH_BASE | string | LDAP 사용자 검색 베이스 | LDAP_USER_SEARCH_BASE=o=users,o=example.com |
| LDAP_SEARCH_FILTER | string | LDAP 검색 필터 | LDAP_SEARCH_FILTER=mail={{username}} |
| LDAP_CA_CERT_PATH | string | CA 인증서 경로 | LDAP_CA_CERT_PATH=/path/to/root_ca_cert.crt |
| LDAP_TLS_REJECT_UNAUTHORIZED | string | LDAP TLS 검증 | LDAP_TLS_REJECT_UNAUTHORIZED=true |
| LDAP_STARTTLS | string | LDAP StartTLS를 활성화하여 연결을 TLS로 업그레이드합니다. 이 기능을 사용하려면 true로 설정하세요. | LDAP_STARTTLS=true |
| LDAP_LOGIN_USES_USERNAME | boolean | LDAP 로그인 시 이메일 대신 사용자 이름을 사용합니다. | # LDAP_LOGIN_USES_USERNAME=true |
| LDAP_ID | string | 고유 사용자 ID를 위한 LDAP 속성. 기본값: uid 또는 sAMAccountName, mail. | # LDAP_ID=uid |
| LDAP_USERNAME | string | 사용자 이름에 대한 LDAP 속성입니다. 기본값: givenName 또는 mail. | # LDAP_USERNAME=givenName |
| LDAP_EMAIL | string | 이메일에 대한 LDAP 속성입니다. 기본값: mail. | # LDAP_EMAIL=userPrincipalName |
| LDAP_FULL_NAME | string | 전체 이름을 위한 LDAP 속성입니다. 쉼표로 구분할 수 있습니다. 기본값: givenName + surname. | # LDAP_FULL_NAME=givenName,surname |
비밀번호 재설정
이메일은 계정 인증 및 비밀번호 재설정에 사용됩니다. LibreChat은 Mailgun API와 기존 SMTP 서비스를 모두 지원합니다. 참조: Email setup
중요 참고: 이메일 기능을 사용하려면 Mailgun(SMTP를 차단하는 서버에 권장) 또는 SMTP 중 하나를 구성해야 합니다.
경고: Mailgun 또는 SMTP에 유효한 값을 설정하지 않으면 LibreChat이 보안되지 않은 비밀번호 재설정을 사용하게 됩니다!
Mailgun 구성 (권장)
Mailgun은 SMTP 포트를 차단하는 서버에 배포할 때 특히 유용합니다. MAILGUN_API_KEY와 MAILGUN_DOMAIN이 모두 설정되면, LibreChat은 SMTP 대신 Mailgun을 사용합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| MAILGUN_API_KEY | string | Mailgun API 키 (Mailgun에 필요). | MAILGUN_API_KEY= |
| MAILGUN_DOMAIN | string | Mailgun 도메인 (Mailgun에 필수). | MAILGUN_DOMAIN=mg.yourdomain.com |
| MAILGUN_HOST | string | Custom Mailgun API host (optional). Use https://api.eu.mailgun.net for EU region. | MAILGUN_HOST=https://api.mailgun.net |
| EMAIL_FROM | string | 발신자 이메일 주소. 필수 항목. | [email protected] |
| EMAIL_FROM_NAME | string | 보내는 사람 이름 (설정하지 않으면 APP_TITLE이 기본값으로 사용됨). | EMAIL_FROM_NAME= |
SMTP 설정
Mailgun이 구성되지 않은 경우, LibreChat은 SMTP 설정으로 대체됩니다.
경고:
EMAIL_SERVICE를 사용하는 경우, 다음의 확장 연결 매개변수를 설정하지 마십시오: HOST, PORT, ENCRYPTION, ENCRYPTION_HOSTNAME, ALLOW_SELFSIGNED.
참고: nodemailer well-known-services
| Key | Type | Description | Example |
|---|---|---|---|
| EMAIL_SERVICE | string | 이메일 서비스 (예: Gmail, Outlook) | EMAIL_SERVICE= |
| EMAIL_HOST | string | 메일 서버 호스트. | EMAIL_HOST= |
| EMAIL_PORT | number | 메일 서버 포트. | EMAIL_PORT=25 |
| EMAIL_ENCRYPTION | string | 암호화 방식 (starttls, tls 등). | EMAIL_ENCRYPTION= |
| EMAIL_ENCRYPTION_HOSTNAME | string | 암호화를 위한 호스트네임. | EMAIL_ENCRYPTION_HOSTNAME= |
| EMAIL_ALLOW_SELFSIGNED | boolean | 자체 서명된 인증서 허용 | EMAIL_ALLOW_SELFSIGNED= |
| EMAIL_USERNAME | string | 인증을 위한 사용자 이름. | EMAIL_USERNAME= |
| EMAIL_PASSWORD | string | 인증을 위한 비밀번호입니다. | EMAIL_PASSWORD= |
| EMAIL_FROM_NAME | string | 보내는 사람 이름 | EMAIL_FROM_NAME= |
| EMAIL_FROM | string | 발신자 이메일 주소. 필수 항목. | [email protected] |
Firebase CDN
참고: Firebase CDN Configuration
중요
- Firebase를 파일 저장 전략으로 사용하는 경우,
librechat.yaml구성 파일에서fileStrategy또는fileStrategies를firebase로 설정하세요.librechat.yaml파일 구성에 대한 자세한 내용은 YAML 구성 가이드를 참조하세요: 사용자 지정 엔드포인트 및 구성
| Key | Type | Description | Example |
|---|---|---|---|
| FIREBASE_API_KEY | string | Firebase 프로젝트를 위한 API 키입니다. | FIREBASE_API_KEY= |
| FIREBASE_AUTH_DOMAIN | string | 프로젝트를 위한 Firebase Auth 도메인입니다. | FIREBASE_AUTH_DOMAIN= |
| FIREBASE_PROJECT_ID | string | Firebase 프로젝트의 ID입니다. | FIREBASE_PROJECT_ID= |
| FIREBASE_STORAGE_BUCKET | string | 프로젝트를 위한 Firebase Storage 버킷입니다. | FIREBASE_STORAGE_BUCKET= |
| FIREBASE_MESSAGING_SENDER_ID | string | Firebase Cloud Messaging 발신자 ID. | FIREBASE_MESSAGING_SENDER_ID= |
| FIREBASE_APP_ID | string | 프로젝트의 Firebase App ID입니다. | FIREBASE_APP_ID= |
Amazon S3 및 CloudFront
참고: Amazon S3 구성 및 CloudFront와 S3
중요
S3를 파일 저장 전략으로 사용하는 경우, librechat.yaml 구성 파일에서 fileStrategy 또는 fileStrategies를 설정하세요. CloudFront를 사용하는 경우에도 저장소 오리진으로 S3가 필요합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| AWS_ACCESS_KEY_ID | string | IAM 사용자 액세스 키 ID입니다. IRSA를 사용하는 경우 선택 사항입니다. | AWS_ACCESS_KEY_ID=your_access_key_id |
| AWS_SECRET_ACCESS_KEY | string | IAM 사용자 보안 액세스 키입니다. IRSA를 사용하는 경우 선택 사항입니다. | AWS_SECRET_ACCESS_KEY=your_secret_access_key |
| AWS_REGION | string | S3 버킷이 위치한 AWS 리전입니다. | AWS_REGION=us-east-1 |
| AWS_BUCKET_NAME | string | 파일 저장을 위한 S3 버킷의 이름입니다. | AWS_BUCKET_NAME=your_bucket_name |
| AWS_ENDPOINT_URL | string | Custom AWS endpoint URL (optional). For S3-compatible services. Include the URL scheme, such as https://a7g8.da.idrivee2-32.com. | # AWS_ENDPOINT_URL=https://your_endpoint_url |
| AWS_FORCE_PATH_STYLE | boolean | 경로 스타일 URL이 필요한 S3 호환 공급자(예: MinIO, Hetzner, Backblaze B2)의 경우 true로 설정하세요. AWS S3에는 필요하지 않습니다. 기본값: false. | # AWS_FORCE_PATH_STYLE=false |
| CLOUDFRONT_KEY_PAIR_ID | string | CloudFront 공개 키 쌍 ID. 서명된 쿠키 및 서명된 CloudFront 다운로드 URL에 필요합니다. | # CLOUDFRONT_KEY_PAIR_ID=K1234567890ABC |
| CLOUDFRONT_PRIVATE_KEY | string | CloudFront 개인 키 PEM. 서명된 쿠키 및 서명된 CloudFront 다운로드 URL에 필요합니다. 이 비밀 값을 주입할 때 PEM 줄 바꿈을 유지하십시오. | # CLOUDFRONT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----" |
참고: Kubernetes 배포(예: EKS)의 경우, 명시적인 자격 증명을 제공하는 대신 IRSA(IAM Roles for Service Accounts)를 사용할 수 있습니다. 이 경우
AWS_REGION및AWS_BUCKET_NAME만 필요합니다.
Azure Blob Storage CDN
중요
Azure Blob Storage를 파일 저장 전략으로 사용하는 경우, librechat.yaml 구성 파일에서 fileStrategy 또는 fileStrategies를 azure_blob으로 설정하세요.
| Key | Type | Description | Example |
|---|---|---|---|
| AZURE_STORAGE_CONNECTION_STRING | string | Azure Blob Storage 연결 문자열입니다. Managed Identity를 사용하려면 이 항목 또는 AZURE_STORAGE_ACCOUNT_NAME을 사용하세요. | AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=... |
| AZURE_STORAGE_ACCOUNT_NAME | string | Azure Storage 계정 이름입니다. 관리 ID 인증에 사용합니다(연결 문자열은 설정하지 마십시오). | # AZURE_STORAGE_ACCOUNT_NAME=yourAccountName |
| AZURE_STORAGE_PUBLIC_ACCESS | boolean | Blob에 대한 공개 액세스를 활성화합니다. 기본값: false. | AZURE_STORAGE_PUBLIC_ACCESS=false |
| AZURE_CONTAINER_NAME | string | 파일 저장을 위한 컨테이너 이름입니다. 기본값: files. | AZURE_CONTAINER_NAME=files |
참고:
AZURE_STORAGE_CONNECTION_STRING(옵션 A) 또는 Managed Identity를 사용하는AZURE_STORAGE_ACCOUNT_NAME(옵션 B) 중 하나만 사용하십시오. 두 가지를 동시에 사용해서는 안 됩니다.
UI
도움말 및 FAQ 버튼
| Key | Type | Description | Example |
|---|---|---|---|
| HELP_AND_FAQ_URL | string | 도움말 및 FAQ URL입니다. 비어 있거나 주석 처리된 경우 버튼이 활성화됩니다. 도움말 및 FAQ 버튼을 비활성화하려면 "/"로 설정하세요. | HELP_AND_FAQ_URL=https://librechat.ai |
동작:
정적 파일에 대한 Cache-Control 헤더를 설정합니다. 이 구성은 NODE_ENV가 production으로 설정된 경우에만 트리거됩니다.
캐시 헤더를 올바르게 설정하는 것은 웹 애플리케이션의 성능과 효율성을 최적화하는 데 매우 중요합니다. 브라우저와 CDN이 정적 파일의 복사본을 저장하는 기간을 제어함으로써 서버 부하를 크게 줄이고, 페이지 로드 시간을 단축하며, 전반적인 사용자 경험을 향상시킬 수 있습니다.
STATIC_CACHE_MAX_AGE의 주석을 해제하여 정적 파일에 대한max-age를 변경할 수 있습니다. 기본값은 4주로 설정되어 있습니다.STATIC_CACHE_S_MAX_AGE의 주석을 해제하여 정적 파일에 대한s-maxage를 변경하세요. 기본값은 1주로 설정되어 있습니다.- 이는 CDN 및 프록시에서 사용하는 _shared cache_를 위한 것입니다.
앱 제목 및 푸터
| Key | Type | Description | Example |
|---|---|---|---|
| APP_TITLE | string | 앱 제목 | APP_TITLE=LibreChat |
| CUSTOM_FOOTER | string | 사용자 지정 푸터 | # CUSTOM_FOOTER="My custom footer" |
| TEMP_CHAT_RETENTION_HOURS | number | **사용 중단:** 대신 librechat.yaml에서 `interface.temporaryChatRetention`을 사용하세요. 임시 채팅을 보관할 시간입니다. 기본값: 720 (30일). | # TEMP_CHAT_RETENTION_HOURS=168 |
동작:
CUSTOM_FOOTER의 주석을 해제하여 사용자 지정 푸터를 추가하세요.CUSTOM_FOOTER의 주석을 해제하고 비워두면 푸터를 제거할 수 있습니다.- You can now add one or more links in the CUSTOM_FOOTER value using the following format:
[Anchor text](URL). Each link should be delineated with a pipe (|).
Markdown 예시:
CUSTOM_FOOTER=[Link 1](http://example1.com) | [Link 2](http://example2.com)
생일 모자
| Key | Type | Description | Example |
|---|---|---|---|
| SHOW_BIRTHDAY_ICON | boolean | 생일 모자 아이콘 표시 | # SHOW_BIRTHDAY_ICON=true |
동작:
- 생일 모자 아이콘은 2월 11일(LibreChat의 생일)에 자동으로 표시됩니다.
SHOW_BIRTHDAY_ICON을false로 설정하여 생일 모자 아이콘을 비활성화하세요.SHOW_BIRTHDAY_ICON을true로 설정하면 생일 모자를 항상 표시할 수 있습니다.
분석
Google Tag Manager
LibreChat은 분석을 위해 Google Tag Manager를 지원합니다. LibreChat에서 이를 활성화하려면 Google Tag Manager ID가 필요합니다. 이 가이드를 따라 Google Tag Manager ID를 생성하고 Google Analytics를 구성하세요. 그런 다음 ANALYTICS_GTM_ID 환경 변수를 귀하의 Google Tag Manager ID로 설정하세요.
참고: ANALYTICS_GTM_ID가 설정되지 않은 경우, Google Tag Manager는 활성화되지 않습니다. 잘못 설정된 경우, gtm.js에 대한 요청 실패가 발생합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| ANALYTICS_GTM_ID | string | Google Tag Manager ID | ANALYTICS_GTM_ID= |
대화 가져오기
메모리 문제를 방지하기 위해 대화 파일 가져오기 제한을 구성하세요.
| Key | Type | Description | Example |
|---|---|---|---|
| CONVERSATION_IMPORT_MAX_FILE_SIZE_BYTES | number | 대화 가져오기를 위한 최대 파일 크기(바이트 단위). 기본값: 0 (제한 없음). 예시: 262144000 (250 MiB). | # CONVERSATION_IMPORT_MAX_FILE_SIZE_BYTES=262144000 |
인라인 파일 미리보기
LibreChat이 인라인 미리보기 추출을 건너뛰고 다운로드 전용으로 남겨둘 생성된 파일의 최대 크기를 제어합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| FILE_PREVIEW_MAX_EXTRACT_BYTES | number | 코드 실행 아티팩트 인라인 미리보기를 위한 바이트 단위의 최대 소스 파일 크기입니다. 기본값: 2097152 (2 MiB). 렌더링된 HTML 미리보기는 별도로 제한되므로, 매우 복잡한 파일은 이 값보다 작더라도 미리보기가 생략될 수 있습니다. | # FILE_PREVIEW_MAX_EXTRACT_BYTES=2097152 |
MCP (Model Context Protocol)
향상된 서버 관리 및 OAuth 지원을 위해 MCP 설정을 구성하세요.
MCP Server Configuration
| Key | Type | Description | Example |
|---|---|---|---|
| MCP_OAUTH_ON_AUTH_ERROR | boolean | oauth 메타데이터를 찾을 수 없을 때 401/403 응답을 OAuth 요구 사항으로 처리합니다. | MCP_OAUTH_ON_AUTH_ERROR=true |
| MCP_OAUTH_DETECTION_TIMEOUT | number | OAuth 감지 요청에 대한 밀리초 단위의 시간 제한입니다. | MCP_OAUTH_DETECTION_TIMEOUT=5000 |
| MCP_OAUTH_HANDLING_TIMEOUT | number | LibreChat이 MCP OAuth 흐름이 완료될 때까지 대기하는 시간(밀리초)입니다. 기본값: 600000 ms (10분). | MCP_OAUTH_HANDLING_TIMEOUT=600000 |
| MCP_OAUTH_FLOW_TTL | number | MCP OAuth 흐름 상태가 유지되는 시간입니다. LibreChat은 MCP_OAUTH_HANDLING_TIMEOUT보다 긴 시간을 보장하여 마감 시간에 임박한 콜백도 완료될 수 있도록 합니다. 기본값: 900000 ms (15분). | MCP_OAUTH_FLOW_TTL=900000 |
| MCP_CONNECTION_CHECK_TTL | number | 비용이 많이 드는 확인 작업을 방지하기 위해 이 밀리초만큼 캐시 연결 상태 확인을 유지합니다. | MCP_CONNECTION_CHECK_TTL=30000 |
| MCP_TOOLS_LIST_MAX_PAGES | number | MCP 서버가 도구 목록을 페이지네이션(커서 페이지네이션)할 때 요청할 최대 도구/목록 페이지 수입니다. 페이지네이션 루프의 범위를 제한하여 잘못 작동하는 서버가 도구 검색을 중단시키지 않도록 합니다. 최소 1로 제한됩니다. 기본값: 50. | MCP_TOOLS_LIST_MAX_PAGES=50 |
| MCP_SKIP_CODE_CHALLENGE_CHECK | boolean | 코드 챌린지 메서드 유효성 검사를 건너뜁니다. true로 설정하면 .well-known/openid-configuration에 명시되지 않은 경우에도 S256 코드 챌린지를 강제합니다. | MCP_SKIP_CODE_CHALLENGE_CHECK=false |
| MCP_STREAMABLE_HTTP_MAX_RESPONSE_BYTES | number | 거부하기 전 비-GET 스트리밍 가능 HTTP MCP 응답에서 허용되는 최대 바이트 수입니다. 0으로 설정하면 비활성화됩니다. 기본값: 16777216 (16 MiB). | # MCP_STREAMABLE_HTTP_MAX_RESPONSE_BYTES=16777216 |
| MCP_STREAMABLE_HTTP_MAX_LINE_BYTES | number | GET이 아닌 스트리밍 가능한 HTTP MCP 응답의 한 SSE 라인에서 허용되는 최대 바이트 수입니다. 0으로 설정하면 비활성화됩니다. 기본값: 5242880 (5 MiB). | # MCP_STREAMABLE_HTTP_MAX_LINE_BYTES=5242880 |
기타
Redis
Redis는 LibreChat에 상당한 성능 향상을 제공하며 수평적 확장 기능을 가능하게 합니다.
참고: Redis 지원은 실험적인 기능이므로, 사용 시 몇 가지 문제가 발생할 수 있습니다.
중요: Redis를 사용하는 경우, LibreChat 설정을 변경한 후에는 캐시를 비워야 합니다.
자세한 구성 및 예시는 다음을 참조하세요: Redis Configuration Guide
| Key | Type | Description | Example |
|---|---|---|---|
| USE_REDIS | boolean | 캐싱 및 세션 저장을 위해 Redis를 활성화합니다. true로 설정할 경우 REDIS_URI를 반드시 제공해야 합니다. | USE_REDIS=true |
| USE_REDIS_STREAMS | boolean | 재개 가능한 LLM 스트림을 위해 Redis를 활성화합니다. 설정되지 않은 경우 USE_REDIS 값을 기본값으로 사용합니다. 스트림에 메모리 내 저장소를 사용하려면 false로 설정하세요. | # USE_REDIS_STREAMS=true |
| REDIS_URI | string | Redis 연결 URI. 단일 인스턴스의 경우: `redis://host:port`. 클러스터의 경우: 쉼표로 구분된 URI. | REDIS_URI=redis://127.0.0.1:6379 |
| USE_REDIS_CLUSTER | boolean | 단일 URI 사용 시 Redis 클러스터 모드 활성화 | # USE_REDIS_CLUSTER="true" |
| REDIS_CLUSTER_SAFE_DELETE | boolean | 내부적으로 키를 샤딩하는 단일 엔드포인트 관리형 Redis 서비스에서 CROSSSLOT 오류를 방지하기 위해 Redis 캐시 키를 개별적으로 삭제하세요. | # REDIS_CLUSTER_SAFE_DELETE=true |
| REDIS_USERNAME | string | 인증을 위한 Redis 사용자 이름입니다. URI와 함께 제공되는 경우 URI의 사용자 이름을 덮어씁니다. | # REDIS_USERNAME=your_redis_username |
| REDIS_PASSWORD | string | 인증을 위한 Redis 비밀번호입니다. URI와 비밀번호가 모두 제공된 경우 URI의 비밀번호를 덮어씁니다. | # REDIS_PASSWORD=your_redis_password |
| REDIS_CA | string | rediss:// 프로토콜 사용 시 TLS 검증을 위한 CA 인증서 경로입니다. | # REDIS_CA=/path/to/ca-cert.pem |
| REDIS_KEY_PREFIX | string | 교차 배포 오염을 방지하기 위한 모든 Redis 키의 정적 접두사입니다. | # REDIS_KEY_PREFIX=librechat-prod-v2 |
| REDIS_KEY_PREFIX_VAR | string | 동적 접두사가 포함된 환경 변수 이름(예: Cloud Run의 경우 K_REVISION). REDIS_KEY_PREFIX와 함께 사용할 수 없습니다. | # REDIS_KEY_PREFIX_VAR=K_REVISION |
| REDIS_MAX_LISTENERS | number | Redis 클라이언트당 최대 이벤트 리스너 수입니다. 메모리 누수를 방지합니다. 기본값: 40. | # REDIS_MAX_LISTENERS=40 |
| REDIS_PING_INTERVAL | number | 연결을 유지하기 위한 핑(ping) 간격(초 단위). 기본값: 0 (비활성화). 타임아웃 문제가 발생하는 경우에만 설정하십시오. | # REDIS_PING_INTERVAL=300 |
| FORCED_IN_MEMORY_CACHE_NAMESPACES | string | Redis가 활성화된 경우에도 인메모리 스토리지를 강제할 쉼표로 구분된 캐시 키입니다. | # FORCED_IN_MEMORY_CACHE_NAMESPACES=ROLES,MESSAGES |
| REDIS_USE_ALTERNATIVE_DNS_LOOKUP | boolean | AWS Elasticache를 사용하는 TLS 연결에 대해 대체 dnsLookup을 활성화합니다. TLS가 적용된 Elasticache 클러스터에 필요합니다. | # REDIS_USE_ALTERNATIVE_DNS_LOOKUP=true |
참고:
USE_REDIS=true일 때,REDIS_URI를 제공해야 하며 그렇지 않으면 애플리케이션에서 오류가 발생합니다.- Redis Cluster 모드의 경우, 여러 개의 URI를 제공하십시오:
redis://node1:7001,redis://node2:7002,redis://node3:7003(클러스터 모드는 자동으로 감지됩니다). - 내부적으로 키를 샤딩하는 단일 엔드포인트 관리형 Redis 서비스의 경우,
USE_REDIS_CLUSTER=false를 유지하고 캐시 삭제 시CROSSSLOT오류가 발생하면REDIS_CLUSTER_SAFE_DELETE=true로 설정하십시오. - TLS 연결에는
rediss://프로토콜을 사용하고, CA가 공개적으로 신뢰되지 않는 경우REDIS_CA를 설정하세요. REDIS_KEY_PREFIX_VAR와REDIS_KEY_PREFIX는 상호 배타적입니다.- AWS Elasticache with TLS: Elasticache는 TLS 연결을 위해 대체 dnsLookup을 사용해야 할 수 있습니다. TLS가 적용된 Elasticache를 사용하는 경우
REDIS_USE_ALTERNATIVE_DNS_LOOKUP=true로 설정하세요. 자세한 내용은 ioredis documentation을 참조하세요.
리더 선출 (Leader Election)
Redis를 사용하여 다중 인스턴스 배포를 위한 분산 리더 선출(distributed leader election)을 구성하세요. 리더 선출은 예약된 작업과 같은 특정 작업을 하나의 인스턴스만 수행하도록 보장합니다.
| Key | Type | Description | Example |
|---|---|---|---|
| LEADER_LEASE_DURATION | number | 리더 임대가 만료되기 전까지 유효한 시간(초 단위). 기본값: 25. | LEADER_LEASE_DURATION=25 |
| LEADER_RENEW_INTERVAL | number | 리더가 임대를 갱신하는 간격(초 단위)입니다. 기본값: 10. | LEADER_RENEW_INTERVAL=10 |
| LEADER_RENEW_ATTEMPTS | number | 임대 갱신 실패 시 최대 재시도 횟수입니다. 기본값: 3. | LEADER_RENEW_ATTEMPTS=3 |
| LEADER_RENEW_RETRY_DELAY | number | 임대 갱신 시 재시도 간격(초). 기본값: 0.5. | LEADER_RENEW_RETRY_DELAY=0.5 |
참고:
- 리더 선출(Leader election)을 사용하려면 Redis가 활성화(
USE_REDIS=true)되어 있어야 합니다. - 이 설정은 다중 인스턴스 배포에만 관련이 있습니다.
- 리더십을 유지하려면 만료되기 전에 리더 임대(leader lease)를 갱신해야 합니다.
- 최대 시도 횟수 이후에도 임대 갱신에 실패하면, 해당 인스턴스는 리더십을 포기합니다.
이 가이드는 어떤가요?