AnolisOs 8安装 docker 并完成FastGpt部署

407 阅读4分钟

AnolisOs 8安装 docker 并完成FastGpt部署


前提,本文用于记录部署使用 ali 的 anolisOs8 进行私有 fastgpt 的部署及应用。

一、前提准备工作

1、安装yum-utils

sudo yum install -y yum-utils

这里简单提一下为什么要安装这个,其自带的例如 yum-config-manage 工具,可以帮助我们方便的管理 yum 相关的源,可以直接使用命令完成添加,而不用手动去创建文件。等等,当然你也可以选择不安装

2、添加 yum 中 docker 相关的下载源

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

这里简单提一下这个命令的背后做了一些什么,通过直接将download.docker.com/linux/cento… 网址中的 docker-ce.repo 文件下载,并保存到了以下的路径中 /etc/yum.repos.d/docker-ce.repo
tip:yum.repos.d 路径下为 yum 的下载源地址

这里简单展示一下 docker-ce.repo 的部分内容

[root@fastgpt ~]# cat /etc/yum.repos.d/docker-ce.repo 
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://download.docker.com/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

二、安装 docker


推荐使用 root 用户安装,或者后续将安装用户名添加到 docker用户组亦可。

sudo yum install -y docker-ce

碎碎念念:docker-ce 即 docker Community Edtion,即免费社区版,以上命令会默认安装最新版本,如果想指定版本安装,请使用 以下命令

sudo yum install -y docker-ce-<version>

三、可能会出现的报错

3.1原因分析

报错

- package containerd.io-1.6.28-3.2.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 from AppStream
  - package containerd.io-1.6.28-3.2.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 from AppStream
  - package containerd.io-1.6.31-3.1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-1.0.1.module+an8.9.0+11183+7cdff43b.x86_64 from AppStream
  - package containerd.io-1.6.31-3.1.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-1.0.1.module+an8.9.0+11183+7cdff43b.x86_64 from AppStream
  - package containerd.io-1.6.31-3.1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11235+293febc5.x86_64 from AppStream
  - package containerd.io-1.6.31-3.1.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11235+293febc5.x86_64 from AppStream
  - package containerd.io-1.6.31-3.1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 from AppStream
  - package containerd.io-1.6.31-3.1.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 from AppStream
  - package containerd.io-1.6.32-3.1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-1.0.1.module+an8.9.0+11183+7cdff43b.x86_64 from AppStream
  - package containerd.io-1.6.32-3.1.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-1.0.1.module+an8.9.0+11183+7cdff43b.x86_64 from AppStream
  - package containerd.io-1.6.32-3.1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11235+293febc5.x86_64 from AppStream
  - package containerd.io-1.6.32-3.1.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11235+293febc5.x86_64 from AppStream
  - package containerd.io-1.6.32-3.1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 from AppStream
  - package containerd.io-1.6.32-3.1.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 from AppStream
(尝试在命令行中添加 '--allowerasing' 来替换冲突的软件包 或 '--skip-broken' 来跳过无法安装的软件包 或 '--nobest' 来不只使用软件包的最佳候选)

简单抽一条出来翻译看一下出现以下提示的原因
- package containerd.io-1.6.32-3.1.el8.x86_64 from docker-ce-stable obsoletes runc provided by runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 from AppStream
翻译如下:
- docker-ce-stable 中的 containerd.io-1.6.32-3.1.el8.x86_64 软件包取代了 AppStream 中的 runc-1:1.1.12-4.0.1.module+an8.9.0+11257+d476ec85.x86_64 提供的 runc

即安装的的 docker-ce 中所附带的 containerd 会取代 系统中原有的 runc 。此时需要你手动输入 '--allowerasing' 参数进行确认。

3.2使用修改后的命令再次进行安装
    sudo yum install -y docker-ce --allowerasing

四、启动 docker 并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker
4.1、设置 docker 镜像仓库

这里推荐直接登录阿里云,使用阿里云提供的个人 docker 镜像源cr.console.aliyun.com/cn-hangzhou…

image.png

按以上图,直接 cv 命令即可。

4.2 安装docker-compose

最新版本的 docker 已自带,无需额外安装,如果是旧版本的话,则去 github 下载最新版本的或者对应版本的 docker-compose,放入 /usr/local/bin 目录下,添加可执行权限即可。

# 安装 docker-compose
curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

五、配置运行 fastgpt

按照官网文档,执行以下指令即可。

5.1 下载 docker-compose 配置文件

# 到你想要安装的目录下
mkdir fastgpt
cd fastgpt
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json
# pgvector 版本(测试推荐,简单快捷)
curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml
# milvus 版本
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-milvus.yml
# zilliz 版本
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-zilliz.yml

随后进入创建的 fastgpt 文件夹

root@fastgpt]# ls
config.json  docker-compose.yml  mongo  mysql  oneapi  pg
# docker-copmose.yml 即 docker-compose 的相关配置文件,直接执行 docker-compose up -d 即可
    

5.2修改配置文件(修改镜像地址为国内阿里云,如果服务器在国外或者有特殊上网方式可跳过这步)

#将 默认的 image: xx注释掉,将 hangzhou.aliyuncs.comxxx启用(即删除注释)
  image: pgvector/pgvector:0.7.0-pg15 # docker hub
   #image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云
修改结果如下
 # image: pgvector/pgvector:0.7.0-pg15 # docker hub
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云

完整示例文件如下:

[root@fastgpt]# cat docker-compose.yml 
# 数据库的默认账号和密码仅首次运行时设置有效
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)

version: '3.3'
services:
  # db
  pg:
    # image: pgvector/pgvector:0.7.0-pg15 # docker hub
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云
    container_name: pg
    restart: always
    ports: # 生产环境建议不要暴露
      - 5432:5432
    networks:
      - fastgpt
    environment:
      # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
      - POSTGRES_USER=xxxx # 填入你自己的账户
      - POSTGRES_PASSWORD=xxxxx# 填入你自己的密码
      - POSTGRES_DB=postgres
    volumes:
      - ./pg/data:/var/lib/postgresql/data
  mongo:
    #image: mongo:5.0.18 # dockerhub
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
    # image: mongo:4.4.29 # cpu不支持AVX时候使用
    container_name: mongo
    restart: always
    ports:
      - 27017:27017
    networks:
      - fastgpt
    command: mongod --keyFile /data/mongodb.key --replSet rs0
    environment:
      - MONGO_INITDB_ROOT_USERNAME=mongoDb
      - MONGO_INITDB_ROOT_PASSWORD=xxxx # 填入你自己的账户
    volumes:
      - ./mongo/data:/data/db
    entrypoint:
      - bash
      - -c
      - |
        openssl rand -base64 128 > /data/mongodb.key
        chmod 400 /data/mongodb.key
        chown 999:999 /data/mongodb.key
        echo 'const isInited = rs.status().ok === 1
        if(!isInited){
          rs.initiate({
              _id: "rs0",
              members: [
                  { _id: 0, host: "mongo:27017" }
              ]
          })
        }' > /data/initReplicaSet.js
        # 启动MongoDB服务
        exec docker-entrypoint.sh "$$@" &

        # 等待MongoDB服务启动
        until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')" > /dev/null 2>&1; do
          echo "Waiting for MongoDB to start..."
          sleep 2
        done

        # 执行初始化副本集的脚本
        mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js

        # 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
        wait $$!

  # fastgpt
  sandbox:
    container_name: sandbox
    #image: ghcr.io/labring/fastgpt-sandbox:latest # git
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest # 阿里云
    networks:
      - fastgpt
    restart: always
  fastgpt:
    container_name: fastgpt
    #image: ghcr.io/labring/fastgpt:v4.8.9 # git
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.9 # 阿里云
    ports:
      - 3000:3000
    networks:
      - fastgpt
    depends_on:
      - mongo
      - pg
      - sandbox
    restart: always
    environment:
      # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
      - DEFAULT_ROOT_PSW=1234
      # AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。
      - OPENAI_BASE_URL=http://oneapi:3000/v1
      # AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改)
      - CHAT_API_KEY=sk-fastgpt
      # 数据库最大连接数
      - DB_MAX_LINK=30
      # 登录凭证密钥
      - TOKEN_KEY=any
      # root的密钥,常用于升级时候的初始化请求
      - ROOT_KEY=root_key
      # 文件阅读加密
      - FILE_TOKEN_KEY=filetoken
      # MongoDB 连接参数. 用户名myusername,密码mypassword。
      - MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
      # pg 连接参数
      - PG_URL=postgresql://username:password@pg:5432/postgres
      # sandbox 地址
      - SANDBOX_URL=http://sandbox:3000
      # 日志等级: debug, info, warn, error
      - LOG_LEVEL=info
      - STORE_LOG_LEVEL=warn
    volumes:
      - ./config.json:/app/data/config.json

  # oneapi
  mysql:
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云
    #image: mysql:8.0.36
    container_name: mysql
    restart: always
    ports:
      - 3306:3306
    networks:
      - fastgpt
    command: --default-authentication-plugin=mysql_native_password
    environment:
      # 默认root密码,仅首次运行有效
      MYSQL_ROOT_PASSWORD: xxxx # 填入你自己的账户
      MYSQL_DATABASE: oneapi
    volumes:
      - ./mysql:/var/lib/mysql
  oneapi:
    container_name: oneapi
    #image: ghcr.io/songquanpeng/one-api:v0.6.7
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
    ports:
      - 3001:3000
    depends_on:
      - mysql
    networks:
      - fastgpt
    restart: always
    environment:
      # mysql 连接参数
      - SQL_DSN=root:oneapimmysql@tcp(mysql:3306)/oneapi
      # 登录凭证加密密钥
      - SESSION_SECRET=oneapikey
      # 内存缓存
      - MEMORY_CACHE_ENABLED=true
      # 启动聚合更新,减少数据交互频率
      - BATCH_UPDATE_ENABLED=true
      # 聚合更新时长
      - BATCH_UPDATE_INTERVAL=10
      # 初始化的 root 密钥(建议部署完后更改,否则容易泄露)
      - INITIAL_ROOT_TOKEN=fastgpt
    volumes:
      - ./oneapi:/data
networks:
  fastgpt:    

5.3正式启动

# 启动容器
docker-compose up -d
# 等待10s,OneAPI第一次总是要重启几次才能连上Mysql
sleep 10
# 重启一次oneapi(由于OneAPI的默认Key有点问题,不重启的话会提示找不到渠道,临时手动重启一次解决,等待作者修复)
docker restart oneapi
    

查看容器状态

[root@fastgpt]# docker ps
CONTAINER ID   IMAGE                                                              COMMAND                   CREATED        STATUS        PORTS                                                  NAMES
30b3ffd10da2   registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.9           "sh -c 'node --max-o…"   24 hours ago   Up 24 hours   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp              fastgpt
dd7aff545965   registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6           "/one-api"                24 hours ago   Up 24 hours   0.0.0.0:3001->3000/tcp, :::3001->3000/tcp              oneapi
461458d30246   registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18             "bash -c 'openssl ra…"   24 hours ago   Up 24 hours   0.0.0.0:27017->27017/tcp, :::27017->27017/tcp          mongo
c42bdbd15a68   registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0          "docker-entrypoint.s…"   24 hours ago   Up 24 hours   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp              pg
8e1dee8fd45f   registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36             "docker-entrypoint.s…"   24 hours ago   Up 24 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
513f790a61ec   registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest   "docker-entrypoint.s…"   24 hours ago   Up 24 hours                                                          sandbox

自此,访问 该主机的 3000 端口,即可看到部署成功的 fastgpt,详细后面的二开教程请关注后续的文章~