目前 GeekAI 实现了下面四种文件存储驱动
- Local:本地存储,文件上传之后直接存储到本地服务器,这是默认的存储方式,无需任何依赖和配置。本地存储服务会自动对大图进行压缩,并生成缩略图,会比较耗费 CPU 资源。
- Minio:Minio OSS 存储,需要在本地搭建一个 MinIO 存储服务,并将授权信息配置到 config.toml 的 Minio 配置段。
- QiNiu:七牛云 OSS 存储,需要配置七牛云的OSS的授权信息。
- 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)页面,新建密钥,获取到 AccessKey
和 AccessSecret
信息。
# 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)打开浏览器的控制台,如果图片加载失败的话,控制台会有错误输出,一般也会输出图片的地址,对照一下域名跟你设置的是否一致。