注意:在阅读本文档之前,请确保你已经安装好了 docker 以及 docker-compose 这两个工具。

不管是一键部署,还是快速部署,这两种方式都是提供给新手体验用的,如果是在线上生产部署,还是建议拆分部署。理由有三:

  1. 加快启动速度。你每次重启应用的时候,其实你只是想重启 geekai-api 和 geekai-web 这两个容器,快速部署方式每次都是重启所有容器,启动时间会大大延长。
  2. 减少容器之间的耦合。比如数据库和redis容器,通常不会只有这一个项目需要用到,如果重启会对其他项目有影响。
  3. 减少服务中断。比如你更新了 MJ 机器人账号信息,你只需要重启 midjourney-proxy 容器即可,而这并不会导致你线上服务中断。但是如果你不是拆分部署的,那么你就需要重启所有容器,这将导致你的服务中断。

首先,你还是需要克隆项目:

git clone https://github.com/yangjian102621/geek-ai.git geekai

拆分部署用非常简单,就是把 docker-compose.yaml 里面的各个容器都独立出来部署。具体拆分方案可以是这样,除了最后两个,也就是 geekai-api 和 geekai-web 可以一起部署之外,其他容器都需要单独拆分。最简单粗暴的方法就是把 geekai 这个目录拷贝5份。

cp -r geekai mysql
cp -r geekai redis

让后分别切换到各个目录,编辑 docker-compose.yaml 文件,留下对应的容器配置信息,其他的都删除。以 MySQL 容器为例,修剪完的 docker-compose.yaml 文件应该是这样:

version: '3'
services:
  # mysql
  geekai-mysql:
    image: mysql:8.0.33
    container_name: geekai-mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=12345678
    ports:
      - "3307:3306"
    volumes :
      - ./conf/mysql/my.cnf:/etc/mysql/my.cnf
      - ./data/mysql/data:/var/lib/mysql
      - ./logs/mysql:/var/log/mysql
      - ./data/mysql/init.d:/docker-entrypoint-initdb.d/

其他目录也做类似的处理。处理完之后就到了最重要的一步:修改配置文档。 多个容器部署在一个 docker-compose.yaml 的好处是,这些容器都属于同一个内部网络,容器之间可以通过容器名称来访问。 但是现在我们拆分部署了,那么容器之间就只能通过宿主机的 IP 地址通信了。所以我们需要把所有配置文档中用容器名称通信的地方全部换成 IP 地址。主要有两个配置文档,4 个地方需要替换。 conf/config.toml 中需要替换两处,分别是 MySQL 的链接信息,Redis 连接信息。

假设你本机的内网地址是192.268.1.100,那么改完之后应该是下面这个样子:

 


 
 



MysqlDns = "root:12345678@tcp(192.268.1.100:3307)/chatgpt_plus?charset=utf8mb4&collation=utf8mb4_unicode_ci&parseTime=True&loc=Local"

[Redis] # redis 配置信息
Host = "192.268.1.100"
Port = 6380
Password = "12345678"
DB = 0

修改完之后启动所有容器,如果全部启动成功,则拆分部署就完成了。

上次更新: 2025/2/21 18:05:46