LobeHub数据库版完整部署教程

LobeHub数据库版完整部署教程

创建时间:
最近更新:
字数统计: 1343字

项目简介

LobeHub是一款现代化设计的开源ChatGPT/LLMs聊天应用与开发框架,其功能丰富和更新迅速在一众竞品中遥遥领先,支持语音合成、多模态、可扩展的插件系统,包含强大的知识库和MCP功能,允许用户轻松创建大模型应用,享受全天候、多平台、云同步的智能体验。

更多信息,请查阅官方网站官方文档官方仓库

条件准备

为了充分享受完整功能,同时降低维护成本,需要准备以下资源:

  1. 一台有公网IPv4的境外VPS,Linux环境(本教程基于Debian 13),推荐配置不低于1C1G。为了保证境内用户访问体验,最好使用优化线路机器或CDN加速。
  2. 预先安装最新Docker环境(内置Docker Compose),本教程不提供具体操作,可以参考菜鸟教程
  3. 一个GitHub账户,用于提供注册登录功能,以及调用免费的嵌入模型,后者具体限制请参考GitHub Docs
  4. 一个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=

接下来,我们依次填写上面的信息。

  1. 网站配置:

    APP_URL填写你的域名,比如https://lobehub.abcd.com,用户最终通过这个域名进行访问。

    KEY_VAULTS_SECRET是必需的安全措施,在VPS上执行openssl rand -base64 32获得一串密钥填上去。

  2. Postgres 数据库配置:

    LOBE_DB_NAME默认不变,填写一个比较复杂的POSTGRES_PASSWORD即可。

  3. 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
  4. 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
  5. 其他配置:

    推荐使用现成的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使用。