llm+rag本地化部署手册
1.linux 环境搭建
a.基础实验环境搭建
官网安装 docker desktop 即可,详情见下方 Docker 一节
b.使用 WSL2 进行搭建或者使用原生 linux 进行搭建
在管理员模式下打开 PowerShell 或 Windows 命令提示符,方法是右键单击并选择“以管理员身份运行”,输入 wsl --install 命令,然后重启计算机。或是到 Microsoft Store 搜索 Ubuntu,进行下载
下载后可以用这句命令检查:
命令行内输入 wsl 即可进入 wsl 系统
2.依赖环境安装
a. docker
Docker 是一个用于开发、发布和运行应用程序的开放平台。通过 Docker,您可以将应用程序与基础架构分开,从而快速交付软件。使用 Docker,您可以用管理应用程序的相同方式管理基础架构。通过利用 Docker 的发布、测试和部署代码方法,您可以大大减少编写代码与在生产中运行代码之间的延迟。
安装包部署:linux 通过包管理命令,比如 debian 家族 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
,centos 家族 sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
,windows 直接从官网下载 docker desktop 安装包,特点是方便快捷。
二进制部署:从 Docker 官网下载二进制文件并手动安装。适用于没有包管理器的环境或需要定制安装的情况。
Dockerfile 是一个文本文件,其中包含了一系列指令,用于构建一个 Docker 镜像。这些指令定义了如何设置环境、安装软件、复制文件等,以便创建一个完整的运行环境。常用的命令:FROM 指令指定基础镜像,RUN 指令执行命令,CMD 指令指定容器创建时的默认命令,ENTRYPOINT 指令设置主要命令且不易被覆盖,COPY 和 ADD 指令用于文件复制等。docker 在构建镜像时,上下文路径用于告知 docker 引擎本机需打包的文件所在位置,默认是 Dockerfile 所在位置。EXPOSE 声明端口,WORKDIR 指定工作目录,USER 指定执行后续命令的用户和用户组,HEALTHCHECK 监控容器服务运行状态,ONBUILD 延迟构建命令执行,LABEL 为镜像添加元数据
下载完成后,Windows 需要启动 docker desktop 客户端,linux 可以直接在命令行中启动
检查安装是否正确
docker 换源
由于众所周知的原因, 局域网内访问 docker 的速度和稳定性都是比较抽象的,需要进行换源.一个优质的镜像源是阿里云为个人开发者提供的 docker 源
配置镜像加速器_容器镜像服务(ACR)-阿里云帮助中心 (aliyun.com)
配置完成后需要重启服务才能生效:(linux 下)
systemctl daemon-reload
systemctl restart docker
Windows 下 docker desktop 配置镜像的方法:
在 docker desktop 内打开设置-docker engine,在 json 文件中添加
"registry-mirrors": ["url"]
后,点击下方应用&重启按钮即可
离线导入镜像:
本文档提供了一个镜像,您可以通过离线方式导入镜像,或是通过 docker pull
命令在线导入镜像
镜像可以从本地加载, 比如
docker load -i ollama_latest.tar
docker load -i labring_fastgpt_v4.8.8-fix2.tar
docker load -i labring_fastgpt_sandbox_latest.tar
docker load -i songquanpeng_one-api_v0.6.7.tar
docker load -i pgvector_0.7.0-pg15.tar
docker load -i mysql_8.0.36.tar
docker load -i mongo_5.0.18.tar
将镜像打包为压缩文件,可以用这种方式:
docker save -o ollama_latest.tar ollama/ollama:latest
docker save -o labring_fastgpt_v4.8.8-fix2.tar ghcr.io/labring/fastgpt:v4.8.8-fix2
docker save -o labring_fastgpt_sandbox_latest.tar ghcr.io/labring/fastgpt-sandbox:latest
docker save -o songquanpeng_one-api_v0.6.7.tar ghcr.io/songquanpeng/one-api:v0.6.7
docker save -o pgvector_0.7.0-pg15.tar pgvector/pgvector:0.7.0-pg15
docker save -o mysql_8.0.36.tar mysql:8.0.36
docker save -o mongo_5.0.18.tar mongo:5.0.18
3.FastGPT 部署
a. 如何使用 docker-compose.yml 进行安装
tldr,在 docker-compsoe.yml 同级目录下运行这行命令
docker-compose up -d
如果修改了这个文件的内容,需要重启容器才能生效
docker-compose down
docker-compose up -d
安装完成后会自动启动
下面是详细的解释
什么是 docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose 可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
参考 Docker 教程 | 菜鸟教程 (runoob.com)
如何编写 docker-compose 文件
- docker-compose 文件由三个主要部分组成:services、networks 和 volumes。
- services 部分定义了应用程序中的各个服务,每个服务都可以是一个 Docker 容器。
- networks 部分定义了容器之间的网络连接。
- volumes 部分定义了容器可以使用的存储卷。
如何阅读 docker-compose 配置文件
- 了解 docker-compose 文件的基本结构,包括 services、networks 和 volumes 部分。确定每个部分的作用和相互关系。
- 分析服务定义,了解每个服务使用的镜像、端口映射、环境变量等配置。确定服务之间的依赖关系和启动顺序。
- 检查 networks 部分,了解容器之间的网络连接方式。确定是否需要创建自定义网络,以及网络的驱动和其他属性。
- 查看 volumes 部分,了解容器可以使用的存储卷。确定卷的来源和挂载方式。
- 注意服务定义中的 environment ,command、depends_on 等选项,了解设置的环境变量对服务的影响。
以下是 docker-compose 文件中各部分的含义
PostgreSQL (pg)
-
功能: PostgreSQL 是一个强大的开源关系型数据库管理系统,支持多种数据类型和复杂的查询。
-
配置项:
-
image
: 指定使用的 PostgreSQL 镜像。 -
container_name
: 容器的名称。 -
ports
: 将容器的 5432 端口映射到宿主机的 5432 端口。 -
environment
: 设置环境变量,包括数据库用户名、密码和默认数据库。 -
volumes
: 使用宿主机上的目录作为数据卷,持久化数据。
-
-
如果需要修改:
- 修改用户名和密码需要更改
POSTGRES_USER
和POSTGRES_PASSWORD
环境变量。这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果. - 若要修改数据库名称,需要更改
POSTGRES_DB
环境变量。 - 若要更改数据持久化的目录,需要修改
volumes
中的宿主机目录。
- 修改用户名和密码需要更改
MongoDB (mongo)
-
功能: MongoDB 是一个基于分布式文件系统的 NoSQL 数据库管理系统。
-
配置项:
-
image
: 指定使用的 MongoDB 镜像。 -
container_name
: 容器的名称。 -
command
: 指定了启动 MongoDB 时的一些额外命令,如创建复制集等。 -
ports
: 将容器的 27017 端口映射到宿主机的 27017 端口。 -
environment
: 设置环境变量,包括管理员用户的用户名和密码。 -
volumes
: 使用宿主机上的目录作为数据卷,持久化数据。
-
-
如果需要修改:
- 修改管理员用户名和密码需要更改
MONGO_INITDB_ROOT_USERNAME
和MONGO_INITDB_ROOT_PASSWORD
环境变量。 - 若要修改数据持久化的目录,需要修改
volumes
中的宿主机目录。
- 修改管理员用户名和密码需要更改
FastGPT Sandbox (sandbox)
-
功能: 提供一个沙盒环境用于测试和开发 FastGPT 相关的功能。
-
配置项:
-
image
: 指定使用的 FastGPT 沙盒镜像。 -
container_name
: 容器的名称
-
FastGPT (fastgpt)
-
功能: 主要的 FastGPT 服务应用,提供人工智能相关的服务。
-
配置项:
-
image
: 指定使用的 FastGPT 镜像。 -
container_name
: 容器的名称。 -
ports
: 将容器的 3000 端口映射到宿主机的 3000 端口。 -
depends_on
: 指定 FastGPT 依赖的其他服务。 -
environment
: 设置环境变量,包括默认的 root 密码、API URL、API 密钥、数据库连接字符串等。 -
volumes
: 使用宿主机上的目录作为数据卷,加载配置文件。
-
-
如果需要修改:
- 若要更新镜像版本,需要修改
image
字段中的镜像标签。 - 若要更改 API URL 或密钥,需要修改相应的环境变量。
- 若要更改数据库连接字符串,需要修改
MONGODB_URI
和PG_URL
环境变量。 - 若要修改配置文件的位置,需要修改
volumes
中的宿主机目录。
- 若要更新镜像版本,需要修改
MySQL (mysql)
-
功能: MySQL 是一个流行的开源关系型数据库管理系统。
-
配置项:
-
image
: 指定使用的 MySQL 镜像。 -
container_name
: 容器的名称。 -
ports
: 将容器的 3309 端口映射到宿主机的 3309 端口。 -
command
: 设置 MySQL 的启动选项。 -
environment
: 设置环境变量,包括 root 密码和默认数据库。 -
volumes
: 使用宿主机上的目录作为数据卷,持久化数据。
-
-
如果需要修改:
- 修改 root 密码需要更改
MYSQL_ROOT_PASSWORD
环境变量。 - 修改数据库需要更改
MYSQL_DATABASE
环境变量。 - 若要更改数据持久化的目录,需要修改
volumes
中的宿主机目录。
- 修改 root 密码需要更改
OneAPI (oneapi)
-
功能: 提供了一个 API 接口层,用于整合和管理不同的 AI 模型和服务。
-
配置项:
-
image
: 指定使用的 OneAPI 镜像。 -
container_name
: 容器的名称。 -
ports
: 将容器的 3001 端口映射到宿主机的 3001 端口。 -
depends_on
: 指定 OneAPI 依赖的其他服务。 -
environment
: 设置环境变量,包括数据库连接字符串、加密密钥等。 -
volumes
: 使用宿主机上的目录作为数据卷,加载数据。
-
-
如果需要修改:
- 若要更新镜像版本,需要修改
image
字段中的镜像标签。 - 若数据库配置修改,此处需要同步修改
SQL_DSN
环境变量。 - 若要更改加密密钥,需要修改
SESSION_SECRET
环境变量。 - 若要修改数据持久化的目录,需要修改
volumes
中的宿主机目录。
- 若要更新镜像版本,需要修改
Ollama (ollama)
-
功能: 提供了一个平台来运行和管理各种大型语言模型。
-
配置项:
-
image
: 指定使用的 Ollama 镜像。 -
container_name
: 容器的名称。 -
ports
: 将容器的 11434 端口映射到宿主机的 11434 端口。 -
volumes
: 使用宿主机上的目录作为数据卷,加载模型文件。 -
restart
: 设置容器的重启策略。
-
-
如果需要修改:
- 若要更新镜像版本,需要修改
image
字段中的镜像标签。 - 若要更改模型文件的位置,需要修改
volumes
中的宿主机目录。 - 若要更改容器的重启策略,需要修改
restart
字段。
- 若要更新镜像版本,需要修改
网络定义 (networks)
-
功能: 定义了一个名为
fastgpt
的网络,使服务之间能够通信。 -
配置项:
-
networks
: 定义了一个名为fastgpt
的网络。
-
b. 部署完成后验证每个模块正常
检查容器列表 docker ps
:列出所有运行中的容器。需要七个容器都出现
i. docker 日志查看每个服务是否正常
命令为 docker logs <container_id>
,容器 id 可以通过 docker ps
获取。比如这里调取了 fastgpt 的 log
ii. 验证每个数据库是否能够连接成功
这个项目用到了三个数据库:MySQL 与 oneapi 连接,存储 api 数据;PostgreSQL 存储向量化索引数据;MongoDB 存储对话信息,知识库内容等。
以下是连接方法:
1.首先通过命令行接入容器,以 mongodb 为例
docker-desktop 应用内点击 fastgpt 容器:
点击左侧的容器
点击 exec
linux 下,输入 docker exec -it <container_id/container_name> /usr/bin/bash
,获取 container_id 方式为输入 docker ps
例如
2.通过下面的命令接入对应数据库并查看表内容。如果数据库名称/用户名称/密码有过修改,这里应当同步修改
mongo -u myusername -p mypassword --authenticationDatabase admin
show dbs
use fastgpt
show collections
db.<collection_name>.find({}).toArray()
psql -d postgres -U username
\dt
\d modeldata
mysql -u root -p #oneapimmysql
USE oneapi;
SHOW TABLES;
DESCRIBE users;
SELECT * FROM users;
iii. 验证有页面的每个服务是否能进行登录
fastgpt:http://localhost:3000/,初始用户 root,密码 1234
**oneapi:**One API:初始用户名为 root,初始密码为 123456,第一次登录需要修改密码