LobeHub数据库版完整部署教程
项目简介
LobeHub是一款现代化设计的开源ChatGPT/LLMs聊天应用与开发框架,其功能丰富和更新迅速在一众竞品中遥遥领先,支持语音合成、多模态、可扩展的插件系统,包含强大的知识库和MCP功能,允许用户轻松创建大模型应用,享受全天候、多平台、云同步的智能体验。
条件准备
为了充分享受完整功能,同时降低维护成本,需要准备以下资源:
- 一台有公网IPv4的境外VPS,Linux环境(本教程基于Debian 13),推荐配置不低于1C1G。为了保证境内用户访问体验,最好使用优化线路机器或CDN加速。
- 预先安装最新Docker环境(内置Docker Compose),本教程不提供具体操作,可以参考菜鸟教程。
- 一个GitHub账户,用于提供注册登录功能,以及调用免费的嵌入模型,后者具体限制请参考GitHub Docs。
- 一个Cloudflare账户,用于创建和连接S3存储桶。为了方便,推荐使用该账户下的一个域名作为服务域名。
部署步骤
第一步:环境变量
让我们进入工作目录,比如/etc/lobehub,在此目录中创建一份.env文件,写入环境变量:
# 网站配置
APP_URL=
KEY_VAULTS_SECRET=
# Postgres 数据库配置
LOBE_DB_NAME=lobehub
POSTGRES_PASSWORD=
# Next Auth 配置
NEXT_AUTH_SECRET=
NEXT_AUTH_SSO_PROVIDERS=github
AUTH_GITHUB_ID=
AUTH_GITHUB_SECRET=
NEXTAUTH_URL=
# 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
OIDC_JWKS_KEY=
DEFAULT_FILES_CONFIG=embedding_model=github/openai/text-embedding-3-small
GITHUB_TOKEN=
接下来,我们依次填写上面的信息。
-
网站配置:
APP_URL填写你的域名,比如https://lobehub.abcd.com,用户最终通过这个域名进行访问。KEY_VAULTS_SECRET是必需的安全措施,在VPS上执行openssl rand -base64 32获得一串密钥填上去。 -
Postgres 数据库配置:
LOBE_DB_NAME默认不变,填写一个比较复杂的POSTGRES_PASSWORD即可。 -
Next Auth 配置:
NEXT_AUTH_SECRET也是必需的安全措施,参考前面的KEY_VAULTS_SECRET进行创建和填写,二者不得相同。剩余的字段请参考官方文档,最终你将得到类似于这样的结果:
NEXT_AUTH_SSO_PROVIDERS=github AUTH_GITHUB_ID=93R3eR2rRTJYfwgrfee5 AUTH_GITHUB_SECRET=3289r389r828e989fd8gh4343r42refgeht4gag6 NEXTAUTH_URL=https://lobehub.abcd.com/api/auth -
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目前推出了PC端,未来还将推出移动端,为了连接云端部署的服务,我们设置
ENABLE_OIDC为1,OIDC_JWKS_KEY请参考官方文档生成并填写。构建知识库需要嵌入模型,恰好GitHub提供每日免费使用次数,我们只需提供一个
GITHUB_TOKEN,请访问GitHub Developer Settings进行创建,推荐设置Expiration为No Expiration,防止过期。最终你将得到类似于这样的结果:
CRAWLER_IMPLS=jina JINA_READER_API_KEY=jina_xxxxxxxxxxxx ENABLE_OIDC=1 OIDC_JWKS_KEY=(此处省略一大串) DEFAULT_FILES_CONFIG=embedding_model=github/openai/text-embedding-3-small GITHUB_TOKEN=github_pat_xxxxxxxxxx
至此,环境变量填写完毕,类似于下面这样:
# 网站配置
APP_URL=https://lobehub.abcd.com
KEY_VAULTS_SECRET=SX2O5D+SVD/KNm5V+qYI8vl2wOgx1t2L69OQfCW6kd8=
# Postgres 数据库配置
LOBE_DB_NAME=lobehub
POSTGRES_PASSWORD=G8Zq86vLkPyI7GfXFyJV2
# Next Auth 配置
NEXT_AUTH_SECRET=FAB6CyotOTIAK9/vd39qaa/MtAlGdxp89JhliCugrZI=
NEXT_AUTH_SSO_PROVIDERS=github
AUTH_GITHUB_ID=93R3eR2rRTJYfwgrfee5
AUTH_GITHUB_SECRET=3289r389r828e989fd8gh4343r42refgeht4gag6
NEXTAUTH_URL=https://lobehub.abcd.com/api/auth
# Cloudflare S3 配置
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
LLM_VISION_IMAGE_USE_BASE64=1
# 其他配置
CRAWLER_IMPLS=jina
JINA_READER_API_KEY=jina_xxxxxxxxxxxx
ENABLE_OIDC=1
OIDC_JWKS_KEY=(此处省略一大串)
DEFAULT_FILES_CONFIG=embedding_model=github/openai/text-embedding-3-small
GITHUB_TOKEN=github_pat_xxxxxxxxxx
第二步: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: pgvector/pgvector: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'
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获得完整代码。
注意,我们需要调整第78行开始的一部分字段,像这样:
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访问即可开始使用,界面类似于官方实例。
后续操作
我们已经完成部署,目前可以使用几乎全部功能,具体玩法和问题请参考官方文档和官方仓库。
项目内置了大部分常见API站点的接入,也可以配合另一个知名API聚合中转项目New API使用。