LightRAG 知识图谱+Nginx+fastapi鉴权
项目地址:https://github.com/HKUDS/LightRAG
前置条件(如果不指定系统会使用本地文件模拟):
Graph:Neo4J图数据库
KV:PGKVStorage / RedisKVStorage / MongoKVStorage kv库
Vector:Milvus / Qdrant / Faiss / PGVector
DocStatus:例如 PGDocStatusStorage / MongoDocStatusStorage
neo4j图数据库可用:
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/12345678 neo4j:5.26
密码必须超过8位,否则会启动失败
uv pip install "lightrag-hku[api]" 带服务安装推荐,已封装好文件处理这些uv pip install lightrag-hku 仅安装核心,不推荐lightrag-server 运行(会以默认服务启动)
环境配置
拷贝官方.env示范文件来改
# 监听地址
HOST=0.0.0.0
#webui+api接口
PORT=9621
WEBUI_TITLE='页面标题'
WEBUI_DESCRIPTION="webui描述"
# ==========llm配置===========
# 使用哪种后端
LLM_BINDING=openai
# 模型
LLM_MODEL=gpt-4o
#请求地址
LLM_BINDING_HOST=https://api.openai.com/v1
# key
LLM_BINDING_API_KEY=<密钥>
#==========嵌入模型配置===========
EMBEDDING_BINDING=openai
EMBEDDING_MODEL=text-embedding-3-large
EMBEDDING_DIM=3072
EMBEDDING_SEND_DIM=false
EMBEDDING_TOKEN_LIMIT=8192
EMBEDDING_BINDING_HOST=https://api.openai.com/v1
EMBEDDING_BINDING_API_KEY=<密钥>
# ===========重排序==============
RERANK_BINDING=null
# RERANK_MODEL=... # 中文注释:对应服务的rerank模型名
# RERANK_BINDING_HOST=...
# RERANK_BINDING_API_KEY=...
# MIN_RERANK_SCORE=0.0 # 过滤掉分数低的结果
# ========指定图数据库==============
# 需要执行uv pip install neo4j
LIGHTRAG_GRAPH_STORAGE=Neo4JStorage
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD='12345678'
NEO4J_DATABASE=neo4j
NEO4J_MAX_CONNECTION_POOL_SIZE=100
NEO4J_CONNECTION_TIMEOUT=30
NEO4J_CONNECTION_ACQUISITION_TIMEOUT=30
NEO4J_MAX_TRANSACTION_RETRY_TIME=30
NEO4J_MAX_CONNECTION_LIFETIME=300
NEO4J_LIVENESS_CHECK_TIMEOUT=30
NEO4J_KEEP_ALIVE=true
# ==========其它设定=============
# 如果文档主要语言为中文可写
SUMMARY_LANGUAGE=Chinese
本地测试,容器配置,nginx配置
docker-compose.yml
# 本地测试时,如果在windows环境下,可使用这个容器配置
services:
nginx:
image: nginx:1.29-alpine-slim
container_name: nginx
ports:
- "80:80"
volumes:
- D:\code\nginx\nginx.conf:/etc/nginx/nginx.conf:ro # 中文注释:Windows绝对路径 -> 容器内Linux路径
- D:\code\nginx\conf.d:/etc/nginx/conf.d:ro # 中文注释:目录挂载
- D:\code\nginx\html:/usr/share/nginx/html:ro # 中文注释:静态目录
- D:\code\nginx\logs:/var/log/nginx # 中文注释:日志目录
restart: unless-stopped
因为上面使用了D:\code\nginx\nginx.conf路径,所以先创建这个文件:
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 日志位置映射到 /var/log/nginx(我们会把它挂到宿主机的 logs/ 目录)
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 加载站点配置
include /etc/nginx/conf.d/*.conf;
}
然后在D:\code\nginx\conf.d目录下创建lightrag.conf:
server {
listen 8292;
http2 on;
server_name localhost 127.0.0.1;
root /usr/share/nginx/html/lightrag;
index index.html;
# /api 反代(写前面)
location /user_api/ {
# --- 透传且防伪造:只信任本层 Nginx,覆盖为 $remote_addr ---
proxy_set_header Host $host; # 中文注释:保留主机头,方便后端取域名
proxy_set_header X-Real-IP $remote_addr; # 中文注释:真实来源IP(由 Nginx 填入)
proxy_set_header X-Forwarded-For $remote_addr; # 中文注释:覆盖而非追加,避免用户伪造 XFF
proxy_set_header X-Forwarded-Proto $scheme; # 中文注释:http/https 协议信息
# 如果都是在容器,直接使用网络名
proxy_pass http: //host.docker.internal:8293; # 访问宿主机
}
# /static 静态目录
location ^~ /static/ {
alias /usr/share/nginx/html/lightrag/static/;
access_log off;
expires 7d;
add_header Cache-Control "public";
try_files $uri =404;
}
# / → index.html
location = / {
try_files /index.html =404;
}
location ^~ /login {
try_files $uri /index.html;
}
# 其他请求按文件/目录处理
location / {
try_files $uri $uri/ =404;
}
# 授权验证程序,需要验证的路由都请先调用它
location = /_auth {
internal; # 只允许Nginx内部发起子请求,外部无法直接访问
proxy_pass http: //host.docker.internal:8293/user_api/user/verify; #转发到自己的鉴权服务(FastAPI等
proxy_set_header X-Original-URI $request_uri; # 把原请求地址传给鉴权服务,便于做权限判断
# proxy_set_header Cookie $http_cookie; # 把cookie带过去(如果你用cookie会话)
proxy_set_header Authorization $http_authorization; # 把JWT/Token带过去(如果你用Bearer)
}
# 这里是要代理到lightrag的路由,必须经过转发才
location /lightrag/ {
auth_request /_auth; # 先鉴权
auth_request_set $tenant $upstream_http_x_tenant; # 从鉴权响应头读取 X-Tenant
auth_request_set $uid $upstream_http_x_user_id; # 从鉴权响应头读取 X-User-Id
proxy_set_header LIGHTRAG-WORKSPACE $tenant; # 租户映射(可选)
proxy_set_header X-User-Id $uid; # 也可透传用户ID用于审计
proxy_set_header X-API-Key your_lightrag_key; # 注入LightRAG API Key
client_max_body_size 200m; # 控制上传大小
proxy_pass http://host.docker.internal:9621; # 通过后才反代
}
}