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…
按以上图,直接 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,详细后面的二开教程请关注后续的文章~