前言
在前面的文章中,我们部署了FastGPT并进行了使用。那么如果我们想自己进行本地开发,修改FastGPT的代码,需要怎么来处理呢?这部分主要是参考官方文档doc.tryfastgpt.ai/docs/develo…
准备Nodejs
FastGPT项目是一个nodejs项目,所以需要先有nodejs环境。
官方提示需要使用v18.17或v20.x版本,我使用的是v18.17版本。(注意最好使用跟官方一样的版本,我最开始用v18.19版本,结果一直部署不成功)
这里推荐使用nvm来管理nodejs的版本。
另外还需要准备npm或pnpm。(我比较习惯使用pnpm)
克隆代码
大家可以自己fork一下,然后clone到本地
安装数据库
FastGPT需要mongo和向量数据库,关于向量数据库官方给了三种选择,不过建议使用pgvector方案。
另外不只数据库,它还需要oneapi平台来管理模型。所以这里建议使用docker来一键部署。
这部分与之前文章中FastGPT的docker部署很类似,在前面我们下载了项目/files/docker/docker-compose-pgvector.yml
这个文件,并且重命名为docker-compose.yml,这样通过docker compose就可以进行一键部署了。
现在我们需要修改一下,拷贝一下:
cp docker-compose.yml docker-compose.middle.yml
然后在docker-compose.middle.yml文件中将fastgpt相关的内容(包括sendbox)注释或者删除
# fastgpt
... # 这部分删除或注释
# oneapi
然后我们用这个文件来启动docker即可
docker compose -f docker-compose.middle.yml up -d
这样启动后就可以看到mongo、oneapi(以及它需要的mysql)、pgvector都正常运行起来了,而fastgpt和sendbox就不见了,这样我们就可以本地部署代码了。
配置
这里有几个文件,我们一一说一下
环境变量
在项目的 projects/app 目录下有一个.env.template
文件,拷贝一下
cp .env.template .env.local
这个.env.local
文件才是最终生效的环境配置,所以需要在这个文件里进行修改。
需要修改的地方不少,挨个说一下
DEFAULT_ROOT_PSW
这个是FastGPT默认root用户的密码,可以不用修改,为了安全就换一下
OPENAI_BASE_URL
OpenAI的地址,因为我们使用OneApi来管理模型,所以这条注释掉
ONEAPI_URL
OneApi的地址,这条本来是注释掉的,我们用这个所以需要放开。然后配置一下我们自己OneApi的地址。
如果是本机而且依照前面用docker进行启动的,那么OneApi的地址是http://localhost:3001
但是这是控制台地址,接口地址则是http://localhost:3001/v1
CHAT_API_KEY
如果前面用OpenAI,这里填它的key。但是我们用OneApi,所以这里需要填OneApi的key。
OneApi的key是指在令牌中创建的那个令牌的key,在对应令牌那里点复制即可,是一个sk-xxxx形式的字符串。
MONGODB_URI
mongo数据库的地址,这里需要跟之前docker-compose.middle.yml的内容一致。
在docker-compose.middle.yml中给mongo配置了用户名和密码,并且设置了认证数据库,如下:
mongo:
...
ports:
- 27017:27017
...
environment:
- MONGO_INITDB_ROOT_USERNAME=myusername
- MONGO_INITDB_ROOT_PASSWORD=mypassword
volumes:
- ./mongo/data:/data/db
entrypoint:
- bash
- -c
- |
...
# 执行初始化副本集的脚本
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
...
比如我们这里端口是27017,用户名和密码是myusername和mypassword,认证数据库是admin,那么在MONGODB_URI就应该是
mongodb://myusername:mypassword@127.0.0.1:27017/fastgpt?authSource=admin&directConnection=true
注意最后要加上directConnection=true
,否则无法正常访问,因为mongo是在docker中运行的。
这里的fastgpt
是我们使用的库的名称。
PG_URL
我们使用的是pgvector,所以要配置这个地址。如果使用其他向量数据库,则需要配置相应的地址。
这个同样需要与docker-compose.middle.yml中的配置一样,比如:
pg:
...
ports: # 生产环境建议不要暴露
- 5432:5432
...
environment:
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
- POSTGRES_USER=username
- POSTGRES_PASSWORD=password
- POSTGRES_DB=postgres
...
这样的话,这个地址就应该是
postgresql://username:password@127.0.0.1:5432/postgres
config配置文件
在项目的 projects/app/data 目录下有一个config.json文件,拷贝一下
cp config.json config.local.json
然后需要修改config.local.json,这个文件之前docker部署的时候也用到过,主要是配置模型的,需要对应oneapi中的配置,在之前文章中已经详细说过了,这里就不细说了,可以直接把前面的内容复制过来就可以了。
运行
先给自动化脚本代码执行权限,在项目根目录下执行
chmod -R +x ./scripts/
然后安装依赖
pnpm install
会安装根 package、projects 和 packages 内所有依赖。
注意:这一步安装完成后会执行几个脚本,比如isolate-vm的初始化,如果失败,有可能是nodejs版本不对,换成官方推荐的版本再试。
依赖全部安装成功后,进入projects/app 目录运行即可
cd projects/app
pnpm dev
访问
通过pnpm dev运行后就可以看到使用的额端口号,默认是3000,但是如果占用就会自动替换。
然后用浏览器访问即可,就可以正常使用了。
常见问题
下面是我遇到的几个问题
数据库连接失败
mongo或者pgvector连接失败的情况,一定是.env.local中配置的地址不对,要跟docker启动文件中的配置完全一致,比如用户名、密码、库等。
尤其注意docker启动的mongo要添加directConnection=true
getaddrinfo enotfount mongo
这个错误也是mongo连接失败,原因就是没有添加directConnection=true
isolate-vm 安装失败
检查nodejs版本号,最好使用官方推荐的版本,比如v18.17
模型无法使用
有几种情况
一直不响应
比如知识库创建数据集后一直索引中,或者测试应用的时候一直卡住。
这种情况应该是在.env.local中使用的上OpenAi,因为访问它需要代理。还有可能是 CHAT_API_KEY 配置错误。
解决方法要么代理,配置正确的key。要么使用OneApi来配置模型。
Embedding API is not responding
出现这个错误,说明.env.local中OneApi配置不对,检查一下ONEAPI_URL和CHAT_API_KEY
其中ONEAPI_URL要放开(默认是注释掉的),而且注意要有/v1
CHAT_API_KEY是在OneApi平台上创建的令牌