结合以上官官文档和下文,注意:仅供参考
mkdir lobe-chat-db && cd lobe-chat-db
bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN
以上是官方最简单的部署方式,准备内容:
1、一台国外/国内vps
服务器预装wget(建议最新版)、docker、docker-compose(建议最新版)
对外开放3120、8000、9000端口
2、1个以上的模型key
关于知识库:
知识库向量化:
关于模型调用:国内可考虑zhipu embedding-3模型,国外默认openai
基础提问AI厂商注册链接:
zhipu(传送门): https://www.bigmodel.cn/invite?icode=joNcAuzH9S%2BeTG%2FPwpSTqv2gad6AKpjZefIo3dVEQyA%3D
硅基流动(传送门)::https://cloud.siliconflow.cn/i/iRYn4bxO
3、1个域名
域名可在阿里云或其他厂商上购买,后续做域名解析。
域名 反代端口 是否必选
lobe.example.com 3210 必选
auth.example.com 8000 必选
minio.example.com 9000 必选
minio-ui.example.com 9001
如果是考虑使用国外vps,基本准备多一个域名就可以。注意:如果使用外的debain系统基本一次过就能安装完毕。后续就是配置key
如果是使用国内vps或centos7要注意wget和docker-compose的版本,建议使用最新版本。避免出错,具体可通过ai询问或者www.google.com查看具体升级、安装教程。
部署架构:
lobechat + casdoor + minio-s3
lobechat部署其最大亮点是知识库,支持后续对文件的向量化并对文件的数据分析,目前支持的格式可参考下方的链接:
以上功能主要采用了向量化模型 目前向量化默认是使用openai,若是国内机器可更改为zhipu的
部署具体流程:
1、创建docker-compose.yml、.env 文件。可通过以下的代码
bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN
获取,若无法获取,我这边贴出具体的代码:
docker-compose配置中增加S3_SET_ACL=0,主要解决在lobechat上无权限访问文件,让他以私有权限进行访问。也增加了
ZHIPU_API_KEY、SILICONCLOUD_API_KEY、DEFAULT_FILES_CONFIG。对应.env的配置
核心点在于.env的配置,默认的配置是默认openai进行向量化。若考虑使用默认的openai,可在这里拿免费的key。如果是使用国内服务器,无法出国可使用zhipu、硅基流动的作为默认向量化服务,目前是考虑使用zhipu的embedding-3进行向量化,会产生一定的费用。可通过上面我的zhipu链接自行注册获取免费的使用额度。
docker-compose.yml
name: lobe-chat-database
services:
network-service:
image: alpine
container_name: lobe-network
ports:
- '${MINIO_PORT}:${MINIO_PORT}' # MinIO API
- '9001:9001' # MinIO Console
- '${CASDOOR_PORT}:${CASDOOR_PORT}' # Casdoor
- '${LOBE_PORT}:3210' # LobeChat
command: tail -f /dev/null
networks:
- lobe-network
postgresql:
image: pgvector/pgvector:pg17
container_name: lobe-postgres
ports:
- '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
minio:
image: minio/minio
container_name: lobe-minio
network_mode: 'service:network-service'
volumes:
- './s3_data:/etc/minio/data'
environment:
- 'MINIO_API_CORS_ALLOW_ORIGIN=*'
env_file:
- .env
restart: always
entrypoint: >
/bin/sh -c "
minio server /etc/minio/data --address ':${MINIO_PORT}' --console-address ':9001' &
MINIO_PID=\$!
while ! curl -s http://localhost:${MINIO_PORT}/minio/health/live; do
echo 'Waiting for MinIO to start...'
sleep 1
done
sleep 5
mc alias set myminio http://localhost:${MINIO_PORT} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}
echo 'Creating bucket ${MINIO_LOBE_BUCKET}'
mc mb myminio/${MINIO_LOBE_BUCKET}
wait \$MINIO_PID
"
casdoor:
image: casbin/casdoor
container_name: lobe-casdoor
entrypoint: /bin/sh -c './server --createDatabase=true'
network_mode: 'service:network-service'
depends_on:
postgresql:
condition: service_healthy
environment:
RUNNING_IN_DOCKER: 'true'
driverName: 'postgres'
dataSourceName: 'user=postgres password=${POSTGRES_PASSWORD} host=postgresql port=5432 sslmode=disable dbname=casdoor'
runmode: 'dev'
volumes:
- ./init_data.json:/init_data.json
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
minio:
condition: service_started
casdoor:
condition: service_started
environment:
- 'NEXT_AUTH_SSO_PROVIDERS=casdoor'
- 'KEY_VAULTS_SECRET=Kix2wc4CX51EUONd/ZPAd36BqM4wzJgKjPtz2sGztqQ='
- 'NEXT_AUTH_SECRET=BL2U8e9oSre5RfoT7hgNX2kaPE923dt6'
- 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
- 'S3_BUCKET=${MINIO_LOBE_BUCKET}'
- 'S3_ENABLE_PATH_STYLE=1'
- 'S3_ACCESS_KEY=${MINIO_ROOT_USER}'
- 'S3_ACCESS_KEY_ID=${MINIO_ROOT_USER}'
- 'S3_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}'
- 'LLM_VISION_IMAGE_USE_BASE64=1'
- 'S3_SET_ACL=0'
- 'ZHIPU_API_KEY=${ZHIPU_API_KEY}'
- 'SILICONCLOUD_API_KEY=${SILICONCLOUD_API_KEY}'
- 'DEFAULT_FILES_CONFIG=${DEFAULT_FILES_CONFIG}'
env_file:
- .env
restart: always
entrypoint: >
/bin/sh -c "
/bin/node /app/startServer.js &
LOBE_PID=\$!
sleep 3
if [ $(wget --timeout=5 --spider --server-response ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then
echo '⚠️Warining: Unable to fetch OIDC configuration from Casdoor'
echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
else
if ! wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep 'issuer' | grep ${AUTH_CASDOOR_ISSUER}; then
printf '❌Error: The Auth issuer is conflict, Issuer in OIDC configuration is: %s' \$(wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -E 'issuer.*' | awk -F '\"' '{print \$4}')
echo ' , but the issuer in .env file is: ${AUTH_CASDOOR_ISSUER} '
echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
fi
fi
if [ $(wget --timeout=5 --spider --server-response ${S3_ENDPOINT}/minio/health/live 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then
echo '⚠️Warining: Unable to fetch MinIO health status'
echo 'Request URL: ${S3_ENDPOINT}/minio/health/live'
echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
fi
wait \$LOBE_PID
"
volumes:
data:
driver: local
s3_data:
driver: local
networks:
lobe-network:
driver: bridge
.env:
# Proxy,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=https://localhost:7890
# HTTPS_PROXY=https://localhost:7890
# 其他环境变量,视需求而定,可以参照客户端版本的环境变量配置,注意不要有 ACCESS_CODE
# OPENAI_API_KEY=sk-xxxx
# OPENAI_PROXY_URL=https://api.openai.com/v1
# OPENAI_MODEL_LIST=...
# ===================
# === Zhipu AI 配置 ===
# ===================
ZHIPU_API_KEY=你的zhipu-key # 请替换为真实密钥(需要申请)
DEFAULT_FILES_CONFIG=embedding_model=zhipu/embedding-3 # 推荐使用最新 embedding-3 模型
# ===================
# === siliconcloud AI 配置 ===
# ===================
#SILICONCLOUD_API_KEY=你的siliconcloud-key # 请替换为真实密钥(需要申请)
#DEFAULT_FILES_CONFIG=embedding_model=siliconcloud/BAAI/bge-m3 # 推荐使用最新 bge-m3 模型
# ===================
# ===== 预设配置 =====
# ===================
# 如没有特殊需要不用更改
LOBE_PORT=3210
CASDOOR_PORT=8000
MINIO_PORT=9000
APP_URL=https://lobe.google.com
AUTH_URL=https://lobe.google.com/api/auth
# Postgres 相关,也即 DB 必须的环境变量
LOBE_DB_NAME=lobechat
POSTGRES_PASSWORD=uWOPugjTsixf8dxC
AUTH_CASDOOR_ISSUER=https://lauth.google.com
# Casdoor secret
AUTH_CASDOOR_ID=a387a4892ee19b1a2249
AUTH_CASDOOR_SECRET=d3a9f1463fd36484eb4cfc39b4c32589
# MinIO S3 配置
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=eb812acd
# 在下方配置 minio 中添加的桶
S3_PUBLIC_DOMAIN=https://lminio.google.com
S3_ENDPOINT=https://lminio.google.com
MINIO_LOBE_BUCKET=lobe
# 为 casdoor 配置
origin=https://lauth.google.com
各位DEFAULT_FILES_CONFIG的配置只能默认开启一个,请各位根据个人需求进行选择,不设置请同时屏蔽docker-compose的配置,不配置默认使用openai进行文件向量化。
最后欢迎各位早点能给自己搭建私人的知识库。如果有什么问题可以跟帖,能帮忙解决的必定回复哈。