LobeHub 2.0 VPS轻松部署教程
项目简介
LobeHub是一款现代化设计的开源ChatGPT/LLMs聊天应用与开发框架,其功能丰富和更新迅速在一众竞品中遥遥领先,支持语音合成、多模态、可扩展的插件系统,包含强大的知识库和MCP功能,允许用户轻松创建大模型应用,享受全天候、多平台、云同步的智能体验。
条件准备
为了充分享受完整功能,同时降低维护成本,需要准备以下资源:
- 一台有公网IPv4的境外VPS,Linux环境(本教程基于Debian 13),推荐配置不低于1C1G。如需保证境内用户访问体验,推荐使用优化线路机器或CDN加速。
- 预先安装最新Docker环境(内置Docker Compose),本教程不提供具体操作。
- 一个GitHub账户,用于提供方便的注册登录功能。
- 一个Cloudflare账户,用于创建和连接S3存储桶,推荐使用该账户下的一个域名作为服务域名。
部署步骤
第一步:环境变量
让我们进入工作目录,比如/etc/lobehub,在此目录中创建一份.env文件,写入环境变量:
# 网站配置
APP_URL=
KEY_VAULTS_SECRET=
# Postgres 数据库配置
LOBE_DB_NAME=lobehub
POSTGRES_PASSWORD=
# Better Auth 配置
AUTH_SECRET=
AUTH_DISABLE_EMAIL_PASSWORD=1
AUTH_SSO_PROVIDERS=
AUTH_GITHUB_ID=
AUTH_GITHUB_SECRET=
AUTH_ALLOWED_EMAILS=
# Cloudflare S3 配置
S3_BUCKET=
S3_ENDPOINT=
S3_PUBLIC_DOMAIN=
S3_ACCESS_KEY_ID=
S3_SECRET_ACCESS_KEY=
LLM_VISION_IMAGE_USE_BASE64=1
# 其他配置
CRAWLER_IMPLS=jina
JINA_READER_API_KEY=
ENABLE_OIDC=1
JWKS_KEY=
DEFAULT_FILES_CONFIG=
OPENAI_PROXY_URL=
OPENAI_API_KEY=
接下来,我们依次填写上面的信息。
-
网站配置
APP_URL填写你的域名,比如https://lobehub.abcd.com,用户最终通过这个域名进行访问。KEY_VAULTS_SECRET是必需的安全措施,在VPS上执行openssl rand -base64 32获得一串密钥填上去。 -
Postgres 数据库配置
LOBE_DB_NAME默认不变,再填写一个比较复杂的POSTGRES_PASSWORD即可。 -
Better Auth 配置
AUTH_SECRET也是必需的安全措施,参考前面的KEY_VAULTS_SECRET进行创建和填写,二者不得相同。剩余的字段请参考官方文档,类似于这样:
AUTH_SSO_PROVIDERS=github AUTH_GITHUB_ID=93R3eR2rRTJYfwgrfee5 AUTH_GITHUB_SECRET=3289r389r828e989fd8gh4343r42refgeht4gag6另外,可以通过
AUTH_ALLOWED_EMAILS设置允许注册的邮箱,防止被滥用,请参考官方文档。 -
Cloudflare S3 配置
LLM_VISION_IMAGE_USE_BASE64默认为1,表示以base64形式上传图片,以支持视觉模型。剩余的字段请参考官方文档,最终你将得到类似于这样的结果:
S3_BUCKET=lobehub S3_ENDPOINT=https://0b33a03b5c993fd2f453379dc36558e5.r2.cloudflarestorage.com S3_PUBLIC_DOMAIN=https://lobehub-s3.abcd.com S3_ACCESS_KEY_ID=9998d6757e276cf9f1edbd325b7083a6 S3_SECRET_ACCESS_KEY=55af75d8eb6b99f189f6a35f855336ea62cd9c4751a5cf4337c53c1d3f497ac2 -
其他配置
推荐使用现成的Jina服务抓取网页内容,用于联网搜索。因此
CRAWLER_IMPLS默认为jina,JINA_READER_API_KEY请从Jina官网免费获取。LobeHub目前推出了客户端,为了连接云端部署的服务,我们设置
ENABLE_OIDC为1,JWKS_KEY请参考官方文档生成并填写。构建知识库需要嵌入模型,推荐使用硅基流动提供的免费
BAAI/bge-m3,你需要注册并获取API Key。最终你将得到类似于这样的结果:
CRAWLER_IMPLS=jina JINA_READER_API_KEY=jina_xxxxxxxxxxxx ENABLE_OIDC=1 JWKS_KEY=(此处省略一大串) DEFAULT_FILES_CONFIG=embedding_model=openai/BAAI/bge-m3 OPENAI_PROXY_URL=https://api.siliconflow.cn/v1 OPENAI_API_KEY=sk-xxxxxxxxxxx
至此,环境变量填写完毕。
第二步:Docker Compose配置
在工作目录下创建一份docker-compose.yml,填写下面的内容:
name: lobehub-db
services:
network-service:
image: alpine
container_name: lobe-network
restart: always
ports:
- '127.0.0.1:3210:3210' # LobeChat 入口
command: tail -f /dev/null
networks:
- lobe-network
postgresql:
image: paradedb/paradedb:latest-pg17
container_name: lobe-postgres
# ports:
# - '127.0.0.1:5432:5432'
volumes:
- './data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_DB=${LOBE_DB_NAME}'
- 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}'
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 5s
retries: 5
restart: always
networks:
- lobe-network
redis:
image: redis:7-alpine
container_name: lobe-redis
# ports:
# - '127.0.0.1:6379:6379'
command: redis-server --save 60 1000 --appendonly yes
volumes:
- 'redis_data:/data'
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 3s
retries: 5
restart: always
networks:
- lobe-network
searxng:
image: searxng/searxng
container_name: lobe-searxng
volumes:
- './searxng-settings.yml:/etc/searxng/settings.yml'
environment:
- 'SEARXNG_SETTINGS_FILE=/etc/searxng/settings.yml'
restart: always
networks:
- lobe-network
env_file:
- .env
lobe:
image: lobehub/lobehub
container_name: lobe-core
network_mode: 'service:network-service'
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_healthy
network-service:
condition: service_started
environment:
- 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
- 'SEARXNG_URL=http://searxng:8080'
- 'REDIS_URL=redis://redis:6379'
- 'REDIS_PREFIX=lobehub'
- 'REDIS_TLS=0'
- 'INTERNAL_APP_URL=http://localhost:3210'
env_file:
- .env
restart: always
# entrypoint: >
# /bin/sh -c "
# /bin/node /app/startServer.js &
# LOBE_PID=\$!
# sleep 3
# wait \$LOBE_PID
# "
volumes:
# data:
# driver: local
redis_data:
driver: local
networks:
lobe-network:
driver: bridge
该配置负责项目核心、数据库和内建搜索引擎的创建,将服务绑定到127.0.0.1的3210端口。
为了使用内建搜索引擎,还需要在工作目录下提供一份searxng-settings.yml,请从GitHub获得完整代码。
注意,我们需要调整第77行开始的一部分字段,像这样:
formats:
- html
- json # 加上json
server:
# Is overwritten by ${SEARXNG_PORT} and ${SEARXNG_BIND_ADDRESS}
port: 8080 # 最好改一下,保持一致
bind_address: "127.0.0.1"
第三步:启动服务和反向代理
在工作目录,使用ls -a命令查看所有文件,严格按上面的操作完成后,将是这样的:
root@localhost:/etc/lobehub# ls -a
. .. docker-compose.yml .env searxng-settings.yml
确保一切准备就绪,执行docker compose up -d启动所有服务,耐心等待。
然后,使用你熟悉的方式(Nginx/Caddy)反向代理127.0.0.1的3210端口,绑定域名和证书。
部署成功后,通过环境变量中设定的APP_URL访问即可开始使用,界面类似于官方实例。
第四步:后续更新
LobeHub的社区维护非常活跃,请按照下面的方法进行更新:
# 进入你的工作目录
cd /etc/lobehub
# 拉取最新LobeHub镜像
docker compose pull lobe
# 最后启动
docker compose up -d
然而,某些更新不会向下兼容,以至于服务无法启动,可以通过下面的方法排查docker日志并自行解决:
docker logs -f lobe-core
此外,由于docker不会自动删除旧镜像,如果需要释放磁盘空间,请定期执行:
docker system prune -f