376 lines
8.6 KiB
Markdown
376 lines
8.6 KiB
Markdown
# LightRAG Docker Deployment
|
|
|
|
A lightweight Knowledge Graph Retrieval-Augmented Generation system with multiple LLM backend support.
|
|
|
|
## 🚀 Preparation
|
|
|
|
### Clone the repository:
|
|
|
|
```bash
|
|
# Linux/MacOS
|
|
git clone https://github.com/HKUDS/LightRAG.git
|
|
cd LightRAG
|
|
```
|
|
```powershell
|
|
# Windows PowerShell
|
|
git clone https://github.com/HKUDS/LightRAG.git
|
|
cd LightRAG
|
|
```
|
|
|
|
### Configure your environment:
|
|
|
|
```bash
|
|
# Linux/MacOS
|
|
cp .env.example .env
|
|
# Edit .env with your preferred configuration
|
|
```
|
|
```powershell
|
|
# Windows PowerShell
|
|
Copy-Item .env.example .env
|
|
# Edit .env with your preferred configuration
|
|
```
|
|
|
|
LightRAG can be configured using environment variables in the `.env` file:
|
|
|
|
**Server Configuration**
|
|
|
|
- `HOST`: Server host (default: 0.0.0.0)
|
|
- `PORT`: Server port (default: 9621)
|
|
|
|
**LLM Configuration**
|
|
|
|
- `LLM_BINDING`: LLM backend to use (lollms/ollama/openai)
|
|
- `LLM_BINDING_HOST`: LLM server host URL
|
|
- `LLM_MODEL`: Model name to use
|
|
|
|
**Embedding Configuration**
|
|
|
|
- `EMBEDDING_BINDING`: Embedding backend (lollms/ollama/openai)
|
|
- `EMBEDDING_BINDING_HOST`: Embedding server host URL
|
|
- `EMBEDDING_MODEL`: Embedding model name
|
|
|
|
**RAG Configuration**
|
|
|
|
- `MAX_ASYNC`: Maximum async operations
|
|
- `MAX_TOKENS`: Maximum token size
|
|
- `EMBEDDING_DIM`: Embedding dimensions
|
|
|
|
## 🐳 Docker Deployment
|
|
|
|
Docker instructions work the same on all platforms with Docker Desktop installed.
|
|
|
|
### Start LightRAG server:
|
|
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
LightRAG Server uses the following paths for data storage:
|
|
|
|
```
|
|
data/
|
|
├── rag_storage/ # RAG data persistence
|
|
└── inputs/ # Input documents
|
|
```
|
|
|
|
### Updates
|
|
|
|
To update the Docker container:
|
|
```bash
|
|
docker-compose pull
|
|
docker-compose down
|
|
docker-compose up
|
|
```
|
|
|
|
### Offline docker deployment
|
|
|
|
LightRAG provide an docker image can be deployment in offline environments where internet access is limited or unavailable. All you need to do is modify `docker-compose.yml`: change image tag from `latest` to `offline`.
|
|
|
|
> The offline Docker image does not include `docling` because its large size made integration into LightRAG internally impractical. This approach has been deprecated, and `docling` will be provided as a standalone service moving forward.
|
|
|
|
## 📦 Build Multi-Architecture Docker Images
|
|
|
|
### Prerequisites
|
|
|
|
Before building multi-architecture images, ensure you have:
|
|
|
|
- Docker 20.10+ with Buildx support
|
|
- Sufficient disk space (20GB+ recommended for offline image)
|
|
- Registry access credentials (if pushing images)
|
|
|
|
### 1. Setup Buildx Builder
|
|
|
|
Create and configure a multi-architecture builder:
|
|
|
|
```bash
|
|
# Create a new buildx builder instance
|
|
docker buildx create --name multiarch-builder --use
|
|
|
|
# Start and verify the builder
|
|
docker buildx inspect --bootstrap
|
|
|
|
# Verify supported platforms
|
|
docker buildx inspect multiarch-builder
|
|
```
|
|
|
|
You should see support for `linux/amd64` and `linux/arm64` in the output.
|
|
|
|
### 2. Registry Authentication
|
|
|
|
#### For GitHub Container Registry (ghcr.io)
|
|
|
|
**Option 1: Using Personal Access Token**
|
|
|
|
1. Create a GitHub Personal Access Token:
|
|
- Go to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
|
|
- Generate new token with `write:packages` and `read:packages` permissions
|
|
- Copy the token
|
|
|
|
2. Login to registry:
|
|
```bash
|
|
echo "YOUR_GITHUB_TOKEN" | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin
|
|
```
|
|
|
|
**Option 2: Using GitHub CLI**
|
|
|
|
```bash
|
|
gh auth token | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin
|
|
```
|
|
|
|
#### For Docker Hub
|
|
|
|
```bash
|
|
docker login
|
|
# Enter your Docker Hub username and password
|
|
```
|
|
|
|
#### For Other Registries
|
|
|
|
```bash
|
|
docker login your-registry.example.com
|
|
# Enter your credentials
|
|
```
|
|
|
|
### 3. Build Commands
|
|
|
|
#### A. Local Build (No Push)
|
|
|
|
Build multi-architecture images locally without pushing to registry:
|
|
|
|
**Normal image:**
|
|
```bash
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file Dockerfile \
|
|
--tag ghcr.io/hkuds/lightrag:latest \
|
|
--load \
|
|
.
|
|
```
|
|
|
|
**Offline image:**
|
|
```bash
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file Dockerfile.offline \
|
|
--tag ghcr.io/hkuds/lightrag:offline \
|
|
--load \
|
|
.
|
|
```
|
|
|
|
> **Note**: `--load` loads the image to local Docker, but only supports single platform. For multi-platform, use `--push` instead.
|
|
|
|
#### B. Build and Push to Registry
|
|
|
|
Build and directly push to container registry:
|
|
|
|
**Normal image:**
|
|
```bash
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file Dockerfile \
|
|
--tag ghcr.io/hkuds/lightrag:latest \
|
|
--push \
|
|
.
|
|
```
|
|
|
|
**Offline image:**
|
|
```bash
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file Dockerfile.offline \
|
|
--tag ghcr.io/hkuds/lightrag:offline \
|
|
--push \
|
|
.
|
|
```
|
|
|
|
#### C. Build with Multiple Tags
|
|
|
|
Add version tags alongside latest:
|
|
|
|
```bash
|
|
# Get version from git tag
|
|
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v1.0.0")
|
|
|
|
# Build with multiple tags
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file Dockerfile.offline \
|
|
--tag ghcr.io/hkuds/lightrag:offline \
|
|
--tag ghcr.io/hkuds/lightrag:${VERSION}-offline \
|
|
--tag ghcr.io/hkuds/lightrag:offline-latest \
|
|
--push \
|
|
.
|
|
```
|
|
|
|
### 4. Verify Built Images
|
|
|
|
After building, verify the multi-architecture manifest:
|
|
|
|
```bash
|
|
# Inspect image manifest
|
|
docker buildx imagetools inspect ghcr.io/hkuds/lightrag:offline
|
|
|
|
# Expected output shows multiple platforms:
|
|
# Name: ghcr.io/hkuds/lightrag:offline
|
|
# MediaType: application/vnd.docker.distribution.manifest.list.v2+json
|
|
# Platforms: linux/amd64, linux/arm64
|
|
```
|
|
|
|
Pull and test specific architectures:
|
|
|
|
```bash
|
|
# Pull AMD64 version
|
|
docker pull --platform linux/amd64 ghcr.io/hkuds/lightrag:offline
|
|
|
|
# Pull ARM64 version
|
|
docker pull --platform linux/arm64 ghcr.io/hkuds/lightrag:offline
|
|
|
|
# Test run
|
|
docker run --rm -p 9621:9621 ghcr.io/hkuds/lightrag:offline
|
|
```
|
|
|
|
### 5. Troubleshooting
|
|
|
|
#### Build Time is Very Slow
|
|
|
|
**Cause**: Building ARM64 on AMD64 (or vice versa) requires QEMU emulation, which is slower.
|
|
|
|
**Solutions**:
|
|
- Use remote cache (`--cache-from/--cache-to`) for faster subsequent builds
|
|
- Build on native architecture when possible
|
|
- Be patient - initial multi-arch builds take 30-60 minutes
|
|
|
|
#### "No space left on device" Error
|
|
|
|
**Cause**: Insufficient disk space for build layers and cache.
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Clean up Docker system
|
|
docker system prune -a
|
|
|
|
# Clean up buildx cache
|
|
docker buildx prune
|
|
|
|
# Check disk space
|
|
df -h
|
|
```
|
|
|
|
#### "failed to solve: failed to push" Error
|
|
|
|
**Cause**: Not logged into the registry or insufficient permissions.
|
|
|
|
**Solutions**:
|
|
1. Verify you're logged in: `docker login ghcr.io`
|
|
2. Check you have push permissions to the repository
|
|
3. Verify the image name matches your repository path
|
|
|
|
#### Builder Not Found
|
|
|
|
**Cause**: Buildx builder not created or not set as current.
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# List builders
|
|
docker buildx ls
|
|
|
|
# Create and use new builder
|
|
docker buildx create --name multiarch-builder --use
|
|
|
|
# Or switch to existing builder
|
|
docker buildx use multiarch-builder
|
|
```
|
|
|
|
### 6. Cleanup
|
|
|
|
Remove builder when done:
|
|
|
|
```bash
|
|
# Switch back to default builder
|
|
docker buildx use default
|
|
|
|
# Remove multiarch builder
|
|
docker buildx rm multiarch-builder
|
|
|
|
# Prune build cache
|
|
docker buildx prune
|
|
```
|
|
|
|
### 7. Best Practices
|
|
|
|
1. **Use specific tags**: Avoid only using `latest`, include version tags
|
|
2. **Verify platforms**: Always check the manifest after pushing
|
|
4. **Monitor resources**: Ensure sufficient disk space before building
|
|
5. **Test both architectures**: Pull and test each platform variant
|
|
6. **Use .dockerignore**: Exclude unnecessary files to speed up build context transfer
|
|
|
|
### 9. Build Script Example
|
|
|
|
For convenience, create a build script `build-and-push.sh`:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# Configuration
|
|
IMAGE_NAME="ghcr.io/hkuds/lightrag"
|
|
DOCKERFILE="Dockerfile.offline"
|
|
TAG="offline"
|
|
|
|
# Get version
|
|
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "dev")
|
|
|
|
echo "Building ${IMAGE_NAME}:${TAG} (version: ${VERSION})"
|
|
|
|
# Create builder if not exists
|
|
if ! docker buildx inspect multiarch-builder &>/dev/null; then
|
|
echo "Creating buildx builder..."
|
|
docker buildx create --name multiarch-builder --use
|
|
docker buildx inspect --bootstrap
|
|
else
|
|
docker buildx use multiarch-builder
|
|
fi
|
|
|
|
# Build and push
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file ${DOCKERFILE} \
|
|
--tag ${IMAGE_NAME}:${TAG} \
|
|
--tag ${IMAGE_NAME}:${VERSION}-${TAG} \
|
|
--push \
|
|
.
|
|
|
|
echo "✓ Build complete!"
|
|
echo "Image pushed: ${IMAGE_NAME}:${TAG}"
|
|
echo "Version tag: ${IMAGE_NAME}:${VERSION}-${TAG}"
|
|
|
|
# Verify
|
|
docker buildx imagetools inspect ${IMAGE_NAME}:${TAG}
|
|
```
|
|
|
|
Make it executable and run:
|
|
|
|
```bash
|
|
chmod +x build-and-push.sh
|
|
./build-and-push.sh
|
|
```
|