目录
前言
FastGPT官网虽然提供了本地开发部署文档(快速开始本地开发 | FastGPT),但不少细节并没有写得特别清楚,在本地进行开发时需要避坑,具体过程如下:
1. 准备工作
Node.js v20.18.2 (官方推荐)可以去下载历史版本 Index of /download/release/latest-v20.x/
请用官方推荐的版本,不然后面可能会出现版本兼容问题,比如导致isolate-vm初始化失败。
pnpm (这里注意要下载9.0.0以上版本,不然后面构建会提示pnpm版本过旧,官方文档没有及时跟新)推荐npm方式安装。
npm install -g pnpm
2. 拉取源码
从.https://github.com/labring/FastGPT.上获取FastGPT源码或者fork后clone到本地。
FastGPT的核心源码都在 项目/projects/app 路径下。
3. 修改源码
前端代码是用React.js和Typescript写的,源码放在 项目/projects/app/src 里,这里根据自己的需要去修改,例如我想更改一下网页标签的图标,logo存放的在 项目/projects/app/public下,进行替换。
我还想改一下网页标签名称,初始化代码在
项目/projects/app/src/web/context/useInitApp.ts中,setTitle中进行修改。
4. 安装数据库和OneAPI
FastGPT匹配的数据库有mongo、mysql、向量数据库(三选一,优先选择pgvector),最直接的方式就是使用docker部署到本地。在 项目/files/docker 路径下找到 docker-compose-pgvector.yml 文件,拷贝一份命名为 docker-compose.custom.yml,后面以此一键部署。
cp docker-compose.yml docker-compose.custom.yml
在docker-compose.custom.yml文件中将fastgpt相关的内容先删除,sandbox也可以一起删除。
单独创建一个文件夹来存放docker-compose.custom.yml文件,然后在这个目录下执行docker compose -f docker-compose.custom.yml up -d命令。
mkdir ~/db/
cp docker-compose.custom.yml ~/db/
cd ~/db/
docker compose -f docker-compose.custom.yml up -d
注意不要直接在FastGPT源码目录中执行docker compose命令构建数据库容器,因为后面还要但对FastGPT进行镜像构建,多加进来的dockerfile文件会导致构建失败,出现Docker error: failed to solve: archive/tar: unknown file mode ?rwxr-xr-x错误,参考https://stackoverflow.com/questions/78523506/docker-error-failed-to-solve-archive-tar-unknown-file-mode-rwxr-xr-x
这样mongo、mysql、pgvector数据库和oneapi都运行起来,而fastgpt和sandbox没有部署,我们接着就可以进行代码本地部署。
6. 配置文件
(1).env.template
文件需要先拷贝一份到本地,命名为 .env.local,并进行一下修改:
cp .env.template .env.local
ONEAPI_URL
是OneAPI的接入地址,这个并不是接口,不用加上/v1,这里配置为 ONEAPI_URL=http://localhost:3001
CHAT_API_KEY
是OneAPI的访问令牌,填写OneAPI中创建的地址,默认为sk-fastgpt,启动项目后通过OneAPI创建得到新令牌后再粘贴到这里。
MONGODB_URI
是mongo的访问链接,注意这里务必要和docker-compose.custom.yml文件里的保持一致,用户名默认是myusername,密码是mypassword,最后一定要加上&directConnection=true才能连上刚才部署在本地docker的mongo。
# mongo 数据库连接参数,本地开发连接远程数据库时,可能需要增加 directConnection=true 参数,才能连接上。
MONGODB_URI=mongodb://myusername:mypassword@127.0.0.1:27017/fastgpt?authSource=admin&directConnection=true
这是在docker-compose.custom.yml中的配置。
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
...
PG_URL
是访问pgvector向量数据库的地址,要与docker-compose.custom.yml中的配置保持一致。
# 向量库优先级: pg > milvus
# PG 向量库连接参数
PG_URL=postgresql://username:password@127.0.0.1:5432/postgres
这是在docker-compose.custom.yml中的配置。
pg:
...
ports: # 生产环境建议不要暴露
- 5432:5432
...
environment:
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
- POSTGRES_USER=username
- POSTGRES_PASSWORD=password
- POSTGRES_DB=postgres
...
(2)项目/projects/app/data 目录下有一个config.json文件,拷贝并重命名为config.local.json,要把里面的注释全都删除掉。
cp config.json config.local.json
这个文件主要是配置各种模型的,docker部署的时候会用到。可以先不用修改。
5. 本地运行
切换到项目根目录下,给执行脚本授予执行权限,
chmod -R +x ./scripts/
如果是windows下执行,可以进入目录执行里面的postinstall.sh脚本。也可以在git bash下执行上面的命令。
cd ./.scripts
./postinstall.sh
安装依赖
pnpm install
安装完毕后进入 项目/projects/app 目录运行dev即可通过 http://localhost:3000 访问FastGPT
cd ./projects/app
pnpm dev
使用Docker单独打包FastGPT源码,标签和版本号可以自己命名。我这里命名为custom/local/fastgpt:beta
docker build --no-cache -f ./projects/app/Dockerfile -t custom/local/fastgpt:beta . --build-arg name=app
7. 打包部署本地运行
如果你在本地已经完成了修改,想打包一起部署在本地的话,就重新修改docker-compose.custom.yml文件,将之前注释掉的fastgpt和sandbox相关配置重新打开,但这里的镜像地址修改成例如刚才构建的本地镜像标签:custom/local/fastgpt:beta
sandbox是从阿里云镜像库中自动拉取的。
注意:这里的OPENAI_BASE_URL如果对应Docker部署的OneAPI,不能填http://localhost:3001/v1,而要改成http://host.docker.internal:3001/v1,同理,只要是和本地Docker容器进行跨域通信,都要填写host.docker.internal而不是localhost或127.0.0.1。比如在OneAPI接入本地m3e模型时,填写的Base_URL也要填写http://host.docker.internal:6008
# fastgpt
sandbox:
container_name: sandbox
image: ghcr.io/labring/fastgpt-sandbox:v4.8.17 # git
networks:
- fastgpt
restart: always
fastgpt:
container_name: fastgpt
image: custom/local/fastgpt:beta # 这里填刚才本地构建的镜像名
ports:
- 3000:3000
networks:
- fastgpt
depends_on:
- mongo
- pg
- sandbox
restart: always
environment:
# 前端访问地址: http://localhost:3000
- FE_DOMAIN=
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
- DEFAULT_ROOT_PSW=1234
# AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。
- OPENAI_BASE_URL=http://host.docker.internal:3001/v1
# AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改)
- CHAT_API_KEY=sk-YMa9ceB4GVuN6wMc5b37AbA660Ec4e7d947e2f240d686d4c
...
...
volumes:
- ./config.json:/app/data/config.json
删除之前本地运行的数据库容器,重新运行docker-compose命令,本地运行的就是自己修改过源码的FastGPT了。
docker compose -f docker-compose.custom.yml up -d