目前 GeekAI 实现了下面四种文件存储驱动

  1. Local:本地存储,文件上传之后直接存储到本地服务器,这是默认的存储方式,无需任何依赖和配置。本地存储服务会自动对大图进行压缩,并生成缩略图,会比较耗费 CPU 资源。
  2. Minio:Minio OSS 存储,需要在本地搭建一个 MinIO 存储服务,并将授权信息配置到 config.toml 的 Minio 配置段。
  3. QiNiu:七牛云 OSS 存储,需要配置七牛云的OSS的授权信息。
  4. AliYun:阿里云 OSS 存储,需要配置阿里云的OSS的授权信息。 文件存储服务主要用来存储 MJ,SD 等AI创作的图片,以及用户的头像和上传的文件等。如果有条件的话,建议使用阿里云,七牛云这种第三方商用的 OSS 服务,这样可以最大限度的减少服务器的开销。

GeekAI 中 OSS 的具体配置信息如下:

[OSS]
  Active = "Local" # 选择使用哪个存储驱动
  [OSS.Local]
    BasePath = "./static/upload"
    BaseURL = "/static/upload"
  [OSS.Minio]
    Endpoint = "{域名|IP}:9000"
    AccessKey = "BXVYJCNSALQG2V6EB7HD"
    AccessSecret = "sR6GJWDhXfLOgElTJQN0cutdCO3uKmt+ZB00AYmE"
    Bucket = "geekai" # 存储空间名称
    UseSSL = false
    Domain = "http://{域名|IP}:9000"
  [OSS.QiNiu]
    Zone = "z2"
    # 下面密钥信息请到 https://portal.qiniu.com/developer/user/key 获取
    AccessKey = ""
    AccessSecret = ""
    Bucket = "geekai"
    Domain = "" # 空间绑定的域名
  [OSS.AliYun]
    Endpoint = "oss-cn-hangzhou.aliyuncs.com"
    # 阿里云API服务密钥信息请到 https://ram.console.aliyun.com/profile/access-keys 获取
    AccessKey = ""
    AccessSecret = ""
    Bucket = "geekai" # 存储空间名称
    Domain = "" # 空间绑定的域名

这里需要注意的是,除了本地存储之外,其他几种存储方式都需要设定一个 Domain 参数,也就是你在 OSS 上绑定的那个对外访问的域名,否则出现图片上传成功,但是浏览器却无法加载的情况。

# 七牛云 OSS 配置

# 1. 获取密钥

首先,你要去七牛云密钥管理 (opens new window)页面,新建密钥,获取到 AccessKeyAccessSecret 信息。

图片加载中...

# 2. 创建存储空间

进入存储空间管理页面 (opens new window),点击 新建 按钮,然后填写相关信息,创建一个 Bucket,填写好 Bucket 名称,选择地区,访问权限选择 公开

图片加载中...

# 3. 绑定域名

刚刚创建好的空间,选择 域名管理 ,这里的 Domain 就是填写你为 Bucket 绑定的自定义域名,或者自定义 CDN 加速域名。

图片加载中...

或者你随便选中一张图片,然后复制外链,复制的地址所指向的域名就是你的资源对外访问绑定的域名。

图片加载中...

最后,你将获取到的 AccessKey 和 AccessSecret,以及 Bucket 名称等信息,填入到 OSS 配置段:

 [OSS.QiNiu]
    Zone = "z2"
    AccessKey = ""
    AccessSecret = ""
    Bucket = "geekai"
    Domain = "" # 空间绑定的域名

# 阿里云 OSS 配置

# 1. 获取密钥

登录阿里云,然后进入AccessKey管理 (opens new window)页面,新建一个 AccessKey。

图片加载中...

# 2. 创建存储空间

进入Bucket 列表 (opens new window),点击 创建Bucket 按钮,然后填写相关信息,创建一个 Bucket

然后点击刚刚创建的 Bucket,进入 Bucket 配置页面,配置一下 Bucket 权限,先关闭“阻止公共访问”功能。

图片加载中...

然后在“读写权限”菜单,选择 公共读 权限。

图片加载中...

# 3. 绑定域名

点击 “Bucket配置” 菜单,然后点击“绑定域名”,填入要绑定的域名,按照提示完成域名验证即可成功绑定。

图片加载中...

最后,你将获取到的 AccessKey 和 AccessSecret,以及 Bucket 名称等信息,填入到 OSS 配置段:

 [OSS.AliYun]
    Endpoint = "oss-cn-hangzhou.aliyuncs.com"
    AccessKey = ""
    AccessSecret = ""
    Bucket = "geekai" # 存储空间名称
    SubDir = ""
    Domain = "" # 空间绑定的域名

# 搭建 Minio 存储服务

无论是七牛云,还是阿里云 OSS,你都需要有一个已经备案的域名才能绑定使用。 如果你没有域名的话,可以考虑自己搭建一个 Minio 存储服务。

首先,新建 docker-compose.yaml 文件,复制下面内容到文件中:

services:
  minio:
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/minio:latest
    container_name: minio
    restart: always
    volumes:
      - ./data:/data
    ports:
      - "9010:9000"
      - "9011:9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio@pass
    command: server /data --console-address ":9001" --address ":9000"

启动容器

docker-compose up -d

容器启动之后,你需要登录 Minio 的控制台,创建一个 Bucket,生成 Access Keys。并将对应的参数配置到 config.toml 文件中。

在浏览器中访问 http://localhost:9001,用你设置的默认用户名和密码登录(minio/123456)Minio的管理后台。

创建 Access Key

图片加载中...

创建 Bucket

图片加载中...

通常,你需要为 Minio 的网关服务绑定一个域名,用于对外提供 API 的调用和图片加载服务。最简单的方法就是直接把域名(如 oss.abc.com)解析到你 Minio 的服务器上,然后通过 http://oss.abc.com:9000 来访问 Minio API。

当然,你也可以通过 Nginx 做一次反代,这样你就可以直接用 https://oss.abc.com 来访问了。

最后,我们需要对应的信息填入到 OSS 配置段:

 [OSS.Minio]
    Endpoint = "oss.abc.com:9000"
    AccessKey = "BXVYJCNSALQG2V6EB7HD"
    AccessSecret = "sR6GJWDhXfLOgElTJQN0cutdCO3uKmt+ZB00AYmE"
    Bucket = "geekai"
    SubDir = ""
    UseSSL = false # 如果你使用了 https,则这里需要改成 true
    Domain = "http://oss.abc.com:9000"

# 错误处理

一、图片上传成功,但是不显示

首先,如果你使用的是第三方的 OSS 存储的话,确保你将对应的存储空间设置为开放状态。以七牛云为例,在空间设置,访问控制模块设置。

图片加载中...

其次,确保在 GeekAI 的 oss 配置的 domain 是正确的:







 

[OSS.QiNiu]
    Zone = "z2"
    AccessKey = ""
    AccessSecret = ""
    Bucket = "kindeditor"
    SubDir = "geekai"
    Domain = "http://ai.r9it.com"

可以通过(按F12)打开浏览器的控制台,如果图片加载失败的话,控制台会有错误输出,一般也会输出图片的地址,对照一下域名跟你设置的是否一致。

上次更新: 2025/1/20 18:21:29