AnythingLLM Docker 설치 가이드: 올인원 문서 AI 플랫폼




개요

AnythingLLM은 문서와 대화할 수 있는 올인원 AI 애플리케이션입니다. PDF, Word, 웹페이지 등 모든 문서를 업로드하면 AI가 내용을 이해하고 질문에 답변합니다. RAG(검색 증강 생성), AI 에이전트, 노코드 에이전트 빌더, MCP 호환성을 제공하며, 로컬 LLM(Ollama)부터 클라우드 API(OpenAI, Claude)까지 모든 LLM을 지원합니다.

항목내용
GitHubhttps://github.com/Mintplex-Labs/anything-llm
공식 사이트https://anythingllm.com
문서https://docs.anythingllm.com
라이선스MIT
GitHub Stars30K+

AnythingLLM이란?

왜 AnythingLLM인가?

❌ 기존 문서 AI의 문제점:
   - 복잡한 RAG 파이프라인 구축 필요
   - LLM, 벡터DB, 임베딩 각각 설정
   - 기술적 지식 필요

✅ AnythingLLM의 해결책:
   - 올인원: 드래그 앤 드롭으로 문서 업로드
   - 제로 설정: 내장 벡터DB (LanceDB)
   - 유연한 LLM: 로컬부터 클라우드까지
   - 멀티 유저: 팀 협업 지원
   - 에이전트: 노코드로 AI 에이전트 구축

핵심 슬로건

"Chat with your docs"
- 모든 문서를 AI 컨텍스트로 변환
- 워크스페이스로 문서 분류
- 출처 인용 답변
- 완전 오픈소스, 셀프호스팅

아키텍처

┌─────────────────────────────────────────┐
│           AnythingLLM UI                 │
│     (워크스페이스 + 채팅 + 설정)         │
├─────────────────────────────────────────┤
│         Node.js Backend                  │
│   (문서 처리 + 벡터화 + LLM 연결)        │
├──────────────┬──────────────────────────┤
│   LanceDB    │         LLM              │
│ (내장 벡터DB) │ (Ollama/OpenAI/Claude)  │
└──────────────┴──────────────────────────┘

주요 기능

📚 문서 지원

형식지원
PDF
Word (DOCX)
TXT, Markdown
HTML, 웹페이지
YouTube 자막
GitHub 저장소
Notion
Confluence

🤖 LLM 제공자

제공자설명
Ollama로컬 LLM (Llama, Mistral 등)
OpenAIGPT-4o, GPT-4, GPT-3.5
AnthropicClaude 3.5, Claude 3
GoogleGemini Pro
Azure OpenAI엔터프라이즈
Groq초고속 추론
LocalAIOpenAI 호환 로컬
LM Studio로컬 GUI
OpenRouter모든 모델 통합

💾 벡터 데이터베이스

벡터DB설명
LanceDB내장 (기본값, 설정 불필요)
Chroma로컬
Pinecone클라우드
Qdrant로컬/클라우드
Weaviate로컬/클라우드
Milvus대규모

🔧 임베딩 엔진

엔진설명
내장AnythingLLM 기본 임베더
Ollamanomic-embed-text 등
OpenAItext-embedding-3-small
Cohere
LocalAI로컬 임베딩

🛠️ 고급 기능

기능설명
워크스페이스문서 분류 및 컨텍스트 분리
AI 에이전트도구 사용 에이전트
노코드 에이전트 빌더드래그 앤 드롭 에이전트
MCP 호환Model Context Protocol
임베드 위젯웹사이트에 채팅 위젯
브라우저 확장웹페이지 수집
Whisper음성 입력
TTS텍스트 음성 변환

🔐 멀티 유저 (Docker)

기능설명
멀티 유저여러 사용자 지원
권한 관리관리자/일반 사용자
워크스페이스 공유팀 협업
API 키프로그래밍 접근

시스템 요구 사항

항목최소권장
CPU2 코어4+ 코어
RAM2GB8GB+
저장소10GB50GB+
포트3001

Docker 설치

방법 1: 원커맨드 설치 (권장)

# 저장 위치 설정
export STORAGE_LOCATION=$HOME/anythingllm

# 디렉토리 생성
mkdir -p $STORAGE_LOCATION

# Docker 실행
docker run -d -p 3001:3001 \
  --cap-add SYS_ADMIN \
  -v ${STORAGE_LOCATION}:/app/server/storage \
  -e STORAGE_DIR="/app/server/storage" \
  --name anythingllm \
  mintplexlabs/anythingllm:latest

접속: http://localhost:3001

방법 2: Docker Compose (기본)

# docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    ports:
      - "3001:3001"
    cap_add:
      - SYS_ADMIN
    environment:
      - STORAGE_DIR=/app/server/storage
    volumes:
      - ./anythingllm_storage:/app/server/storage

방법 3: Ollama 통합 (로컬 LLM)

# docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    ports:
      - "3001:3001"
    cap_add:
      - SYS_ADMIN
    environment:
      - STORAGE_DIR=/app/server/storage
      - LLM_PROVIDER=ollama
      - OLLAMA_BASE_PATH=http://host.docker.internal:11434
      - OLLAMA_MODEL_PREF=llama3.2
      - EMBEDDING_ENGINE=ollama
      - EMBEDDING_BASE_PATH=http://host.docker.internal:11434
      - EMBEDDING_MODEL_PREF=nomic-embed-text:latest
      - VECTOR_DB=lancedb
    volumes:
      - ./anythingllm_storage:/app/server/storage
    extra_hosts:
      - "host.docker.internal:host-gateway"

  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

방법 4: OpenAI 사용

# docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    ports:
      - "3001:3001"
    cap_add:
      - SYS_ADMIN
    environment:
      - STORAGE_DIR=/app/server/storage
      - LLM_PROVIDER=openai
      - OPEN_AI_KEY=${OPENAI_API_KEY}
      - OPEN_MODEL_PREF=gpt-4o
      - EMBEDDING_ENGINE=openai
      - EMBEDDING_MODEL_PREF=text-embedding-3-small
      - VECTOR_DB=lancedb
    volumes:
      - ./anythingllm_storage:/app/server/storage

방법 5: Anthropic Claude

# docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    ports:
      - "3001:3001"
    cap_add:
      - SYS_ADMIN
    environment:
      - STORAGE_DIR=/app/server/storage
      - LLM_PROVIDER=anthropic
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - ANTHROPIC_MODEL_PREF=claude-3-5-sonnet-20241022
      - EMBEDDING_ENGINE=openai
      - OPEN_AI_KEY=${OPENAI_API_KEY}
      - EMBEDDING_MODEL_PREF=text-embedding-3-small
      - VECTOR_DB=lancedb
    volumes:
      - ./anythingllm_storage:/app/server/storage

방법 6: Qdrant 벡터DB

# docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    ports:
      - "3001:3001"
    cap_add:
      - SYS_ADMIN
    environment:
      - STORAGE_DIR=/app/server/storage
      - VECTOR_DB=qdrant
      - QDRANT_ENDPOINT=http://qdrant:6333
    volumes:
      - ./anythingllm_storage:/app/server/storage
    depends_on:
      - qdrant

  qdrant:
    image: qdrant/qdrant:latest
    container_name: qdrant
    restart: unless-stopped
    ports:
      - "6333:6333"
    volumes:
      - ./qdrant_storage:/qdrant/storage

방법 7: PostgreSQL 데이터베이스

# docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:pg
    container_name: anythingllm
    restart: unless-stopped
    ports:
      - "3001:3001"
    cap_add:
      - SYS_ADMIN
    environment:
      - STORAGE_DIR=/app/server/storage
      - DATABASE_CONNECTION_STRING=postgresql://anythingllm:password@postgres:5432/anythingllm
    volumes:
      - ./anythingllm_storage:/app/server/storage
    depends_on:
      - postgres

  postgres:
    image: postgres:15
    container_name: anythingllm-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=anythingllm
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=anythingllm
    volumes:
      - ./postgres_data:/var/lib/postgresql/data

방법 8: Traefik + HTTPS

# docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    cap_add:
      - SYS_ADMIN
    environment:
      - STORAGE_DIR=/app/server/storage
    volumes:
      - ./anythingllm_storage:/app/server/storage
    networks:
      - traefik_network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.anythingllm.rule=Host(`ai.example.com`)"
      - "traefik.http.routers.anythingllm.entrypoints=websecure"
      - "traefik.http.routers.anythingllm.tls.certresolver=letsencrypt"
      - "traefik.http.services.anythingllm.loadbalancer.server.port=3001"

networks:
  traefik_network:
    external: true

환경 변수

기본 설정

변수설명기본값
STORAGE_DIR저장 디렉토리/app/server/storage
SERVER_PORT서버 포트3001
JWT_SECRETJWT 시크릿
DISABLE_TELEMETRY텔레메트리 비활성화false

LLM 제공자

변수설명
LLM_PROVIDERollama, openai, anthropic, gemini, azure
OLLAMA_BASE_PATHOllama API URL
OLLAMA_MODEL_PREFOllama 모델
OPEN_AI_KEYOpenAI API 키
OPEN_MODEL_PREFOpenAI 모델
ANTHROPIC_API_KEYAnthropic API 키
ANTHROPIC_MODEL_PREFClaude 모델

임베딩 엔진

변수설명
EMBEDDING_ENGINEnative, ollama, openai
EMBEDDING_BASE_PATH임베딩 API URL
EMBEDDING_MODEL_PREF임베딩 모델
EMBEDDING_MODEL_MAX_CHUNK_LENGTH청크 최대 길이

벡터 데이터베이스

변수설명
VECTOR_DBlancedb, chroma, qdrant, pinecone
QDRANT_ENDPOINTQdrant URL
CHROMA_ENDPOINTChroma URL
PINECONE_API_KEYPinecone API 키

음성

변수설명
WHISPER_PROVIDERlocal, openai
TTS_PROVIDERnative, openai, elevenlabs

인증

변수설명
AUTH_TOKEN싱글 유저 인증 토큰
PASSWORDMINCHAR최소 비밀번호 길이

초기 설정

1) 첫 접속

URL: http://localhost:3001
→ 설정 마법사 시작

2) LLM 선택

  1. SettingsLLM Preference
  2. 제공자 선택 (Ollama, OpenAI 등)
  3. API 키 또는 URL 입력
  4. 모델 선택

3) 임베딩 설정

  1. SettingsEmbedder
  2. 엔진 선택 (Ollama, OpenAI 등)
  3. 모델 선택 (nomic-embed-text 등)

4) 첫 워크스페이스 만들기

  1. New Workspace 클릭
  2. 이름 지정 (예: “회사 문서”)
  3. 문서 업로드 (드래그 앤 드롭)
  4. 채팅 시작

사용 가이드

워크스페이스 이해

워크스페이스는 문서 그룹을 분리하는 컨테이너입니다:

워크스페이스 A: 회사 정책 문서
워크스페이스 B: 기술 문서
워크스페이스 C: 연구 논문

→ 각 워크스페이스는 서로 분리된 컨텍스트
→ 같은 문서를 여러 워크스페이스에 공유 가능

문서 업로드

  1. 워크스페이스 선택
  2. 업로드 버튼 클릭 또는 드래그 앤 드롭
  3. 자동 청킹 및 임베딩
  4. 완료 후 채팅 가능

채팅 모드

모드설명
Chat문서 컨텍스트 + LLM 지식
Query문서 컨텍스트만 (환각 방지)

AI 에이전트 사용

  1. SettingsAgent Skills
  2. 도구 활성화 (웹 검색, 코드 실행 등)
  3. 워크스페이스에서 @agent 명령

임베드 위젯

웹사이트에 채팅 위젯 추가:

  1. SettingsEmbed Chat
  2. 워크스페이스 선택
  3. 코드 생성
  4. 웹사이트에 붙여넣기
<script src="https://your-server:3001/embed/widget.js"></script>

API 사용

# 채팅 API
curl -X POST "http://localhost:3001/api/v1/workspace/{workspace-slug}/chat" \
  -H "Authorization: Bearer {api-key}" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "이 문서의 핵심 내용은?",
    "mode": "chat"
  }'

백업 및 복원

데이터 구조

./anythingllm_storage/
├── anythingllm.db       # SQLite 데이터베이스
├── documents/           # 업로드된 문서
├── vector-cache/        # 벡터 캐시
└── lancedb/             # LanceDB 데이터

백업

# 컨테이너 정지
docker compose down

# 전체 백업
tar -czvf anythingllm-backup-$(date +%Y%m%d).tar.gz anythingllm_storage/

# 재시작
docker compose up -d

복원

tar -xzvf anythingllm-backup.tar.gz
docker compose up -d

업데이트

# 최신 이미지 가져오기
docker pull mintplexlabs/anythingllm:latest

# 재시작
docker compose down
docker compose up -d

트러블슈팅

Ollama 연결 안 됨

Docker 내에서 호스트 접근:

# Linux
OLLAMA_BASE_PATH=http://172.17.0.1:11434

# Mac/Windows
OLLAMA_BASE_PATH=http://host.docker.internal:11434

Linux에서 host.docker.internal 사용:

extra_hosts:
  - "host.docker.internal:host-gateway"

권한 오류

UID/GID 확인:

# 현재 사용자 ID 확인
id -u  # UID
id -g  # GID

# Docker Compose에서 설정
environment:
  - UID=1000
  - GID=1000

메모리 부족

대용량 문서 처리 시:

  • 청크 크기 감소
  • 더 작은 임베딩 모델 사용
  • RAM 증가

이미지 태그

태그설명
latest최신 안정 버전
pgPostgreSQL 지원

대안 비교

기능AnythingLLMPrivateGPTOpen WebUI
문서 RAG✅ 내장✅ 내장✅ 플러그인
워크스페이스
멀티 유저✅ Docker
에이전트
노코드 빌더
MCP
임베드 위젯
설치 난이도쉬움중간쉬움
LLM 선택다양다양Ollama 중심

선택 가이드

용도추천
문서 Q&AAnythingLLM
팀 협업AnythingLLM
프라이버시 RAGPrivateGPT
Ollama UIOpen WebUI
임베드 위젯AnythingLLM

활용 사례

1. 회사 지식 베이스

구성:

  • 정책 문서, 매뉴얼 업로드
  • 워크스페이스별 분류 (HR, IT, 영업)
  • 멀티 유저로 팀 접근

결과: 사내 정보 즉시 검색

2. 연구 논문 분석

구성:

  • PDF 논문 업로드
  • 연구 주제별 워크스페이스
  • Query 모드로 정확한 인용

결과: 논문 요약 및 비교

3. 고객 지원 챗봇

구성:

  • FAQ, 제품 문서 업로드
  • 임베드 위젯으로 웹사이트 배포
  • AI 에이전트로 자동 응답

결과: 24/7 고객 지원

4. 코드 문서화

구성:

  • GitHub 저장소 연결
  • README, 코드 주석 임베딩
  • 개발팀 워크스페이스

결과: 코드베이스 Q&A

5. 개인 지식 관리

구성:

  • 노트, 북마크, 기사 수집
  • 브라우저 확장으로 웹페이지 저장
  • 로컬 Ollama로 프라이버시

결과: 개인 AI 비서


마무리

AnythingLLM은 문서와 대화할 수 있는 가장 쉬운 올인원 AI 플랫폼입니다. 드래그 앤 드롭으로 문서를 업로드하고, 내장 LanceDB로 별도 설정 없이 바로 RAG를 사용할 수 있습니다. 로컬 LLM부터 클라우드 API까지 모든 LLM을 지원합니다.

핵심 장점

장점설명
올인원RAG + 에이전트 + 채팅
제로 설정내장 벡터DB (LanceDB)
유연한 LLMOllama, OpenAI, Claude 등
워크스페이스문서 분류 및 컨텍스트 분리
멀티 유저팀 협업 (Docker)
임베드 위젯웹사이트 배포
노코드 에이전트드래그 앤 드롭
MCP 호환Model Context Protocol

이런 분께 추천

문서와 대화하고 싶은 분
복잡한 RAG 설정 없이 시작하고 싶은 분
팀용 지식 베이스가 필요한 분
웹사이트에 AI 채팅을 임베드하고 싶은 분
로컬 LLM으로 프라이버시를 지키고 싶은 분



댓글 남기기