← 返回 TimeAmber
DeepFloodbeta
set 限制解除

【详细教程】Docker部署LobeChat数据库版 轻松体验最美观、最先进、最好用的AI聊天应用

一步一步,轻松部署和使用目前 最美观、最先进、最好用(存疑) 的AI聊天应用LobeChat。

适合大部分mjj,无特殊条件,超低成本,不会翻车。

懒得做?点我体验官方实例,每月50w免费积分,支持云同步(非aff)

xhj026 xhj026 xhj026

声明:DeepFlood原创首发,所有操作均由本人亲自试验总结而来,确保可行

项目简介

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

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

条件准备

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

  1. 一台有公网IPv4的境外VPS,Linux环境(本教程基于Debian 12),推荐配置为2C4G,其中内存不得低于2G。为了保证境内用户访问体验,最好使用优化线路机器或CDN加速。
  2. 预先安装最新Docker环境(内置Docker Compose),本教程不提供具体操作,可以参考菜鸟教程
  3. 一个GitHub账户,用于提供注册登录功能,以及调用免费的嵌入模型,后者具体限制请参考GitHub Docs
  4. 一个Cloudflare账户,用于创建和连接S3存储桶。为了方便,推荐使用该账户下的一个域名作为服务域名。

部署步骤

第一步:环境变量

让我们进入工作目录,比如/etc/lobechat,在此目录中创建一份.env文件,写入环境变量:

# 网站配置
APP_URL=
KEY_VAULTS_SECRET=

# Postgres 数据库配置
LOBE_DB_NAME=lobechat
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://lobechat.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://lobechat.abcd.com/api/auth
    
  4. Cloudflare S3 配置:

    LLM_VISION_IMAGE_USE_BASE64默认为1,表示以base64形式上传图片,以支持视觉模型。

    剩余的字段请参考官方文档,最终你将得到类似于这样的结果:

    S3_BUCKET=lobechat
    S3_ENDPOINT=https://0b33a03b5c993fd2f453379dc36558e5.r2.cloudflarestorage.com
    S3_PUBLIC_DOMAIN=https://lobechat-s3.abcd.com
    S3_ACCESS_KEY_ID=9998d6757e276cf9f1edbd325b7083a6
    S3_SECRET_ACCESS_KEY=55af75d8eb6b99f189f6a35f855336ea62cd9c4751a5cf4337c53c1d3f497ac2
    
  5. 其他配置:

    推荐使用现成的Jina服务抓取网页内容,用于联网搜索。因此CRAWLER_IMPLS默认为jina,JINA_READER_API_KEY请从Jina官网免费获取。

    LobeChat目前推出了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://lobechat.abcd.com
KEY_VAULTS_SECRET=SX2O5D+SVD/KNm5V+qYI8vl2wOgx1t2L69OQfCW6kd8=

# Postgres 数据库配置
LOBE_DB_NAME=lobechat
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://lobechat.abcd.com/api/auth

# Cloudflare S3 配置
S3_BUCKET=lobechat
S3_ENDPOINT=https://0b33a03b5c993fd2f453379dc36558e5.r2.cloudflarestorage.com
S3_PUBLIC_DOMAIN=https://lobechat-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: lobe-chat-database
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

  # version lock ref: https://github.com/lobehub/lobe-chat/pull/7331
  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/lobe-chat-database
    container_name: lobe-chat
    network_mode: 'service:network-service'
    depends_on:
      postgresql:
        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'
    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

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/lobechat# 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使用。

123
  • 统一回应几个问题:

    1. 为什么内存这么大?

    因为这个是功能最完整的数据库版本,而且我们去除了官方脚本中的内建身份验证系统和对象存储系统,已经做了一轮内存缩减,具体占用情况参考下面。

    实际占用不到1G,推荐内存大一点,是怕和其他项目共存导致卡顿。

    CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS 
    e251f3ea2562   lobe-chat           0.00%     467.7MiB / 7.628GiB   5.99%     54.8MB / 149MB    0B / 0B           23 
    31f07a0ded00   lobe-searxng        0.00%     112.4MiB / 7.628GiB   1.44%     482kB / 66.4kB    0B / 5.38MB       10 
    43204f205854   lobe-network        0.00%     340KiB / 7.628GiB     0.00%     54.8MB / 149MB    0B / 0B           1 
    1e48f7e64126   lobe-postgres       0.00%     25.17MiB / 7.628GiB   0.32%     6.69MB / 34.7MB   0B / 3.02MB       6 
    
    1. 用cf行不行?

    可以,官方提供了残血版本,支持cf/vercel,无难度。

    但是,非数据库版本功能不全,无法同步、联网和使用知识库,对于AI爱好者和mjj,数据库版本更好用

    1. 为什么要境外?

    因为境内备案麻烦,而且不支持直接调用国外大模型,会被检测IP

    内建搜索引擎也很依赖境外网络,不然啥也搜不到

    1. 没钱,服务器线路不好怎么办?

    开启cf免费cdn,至少能保证境外访问不卡,以后通过代理访问。

    @jiao360124 #11

  • 看不完,收藏了

  • mark

  • deep起来了

    云在青天水在瓶

  • 不错不错,bd

  • 这么好的帖子才这点少的人跟帖回复?
    必须赞一个。

  • 不如灌水

  • 不错

  • 看不完,收藏了

  • 可以,收藏了

123
内容
预览
对照
AC娘
洋葱头
小黄鸡
Fluent
App