在本地开发部署FastGPT并构建Docker镜像

目录

前言

1. 准备工作

2. 拉取源码

3. 修改源码

4. 安装数据库和OneAPI 

6. 配置文件

5. 本地运行

7. 打包部署本地运行


前言

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

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值