OnlyOffice配置minio文件存储
一、部署minio
测试环境
拉取minio
镜像
为了快速验证,此处使用docker安装部署minio
服务。先拉取minio
最新版镜像资源。
-bash-4.2# docker pull minio/minio:latest
-bash-4.2# docker images | grep minio
minio/minio latest e31e0721a96b 2 years ago 406MB
配置启动配置
提前创建好目录,在目录中创建config
和data
目录用于容器内挂载外部文件夹。
-bash-4.2# pwd
/opt/tools/minio
-bash-4.2# ll
总用量 4
drwxr-xr-x. 3 root root 19 4月 13 09:35 config
drwxr-xr-x. 5 root root 50 4月 13 11:30 data
-rw-r--r--. 1 root root 418 4月 7 11:32 docker-compose.yaml
创建并配置docker-compose.yaml
文件,用于配置minio
容器启动的相关配置,其中9000端口是控制台(默认管理员:账号:admin,密码:1qaz@WSX3edc
),9090端口是API服务访问。
version: "2"
services:
minio:
image: minio/minio:latest
container_name: minio
ports:
- "9000:9000"
- "9090:9090"
volumes:
- "/opt/tools/minio/data:/data"
- "/opt/tools/minio/config:/root/.minio"
environment:
MINIO_ROOT_USER: "admin"
MINIO_ROOT_PASSWORD: "1qaz@WSX3edc"
command: server /data --console-address ":9000" -address ":9090"
restart: always
启动minio
服务
配置docker-compose.yaml
之后,在docker-compose.yaml
同级目录中执行docker-compose up -d
命令启动容器。
-bash-4.2# docker-compose up -d
Recreating minio ... done
-bash-4.2# docker ps | grep minio
91498cf332b6 minio/minio:latest "/usr/bin/docker-ent…" 13 seconds ago Up 12 seconds 0.0.0.0:9000->9000/tcp, 0.0.0.0:9090->9090/tcp minio
启动minio
服务后,访问minio
控制台,http://192.168.95.131:9000
(192.168.95.131为测试机IP),如下图可正常登录访问,则minio
服务已正常启动。
二、创建用户和桶并绑定操作权限
新部署的环境目前没有用户和桶,需要新创建桶和新创建用户(※创建桶和用户目的是为了用户和桶进行操作绑定,用于不同用户之间的操作隔离。此处不是必须,此处可略过,可直接使用管理员账号创建桶和秘钥进行文件操作)。
创建桶
此处创建一个名为test
的桶(默认就是私有的,无特殊情况无需修改)。
创建桶操作权限
由于minio
默认的操作权限不是指定桶的(权限比较大),此处创建一个权限用于限制用户的操作,使用户只能操作test
这个桶。
配置内容如下,其中版本不要修改。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::test"
]
},
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::test/*"
]
}
]
}
创建用户并绑定权限
创建用户的时候只需要配置上之前创建的test
权限即可。注意当前用户只是控制台的操作用户还不能用于开发测试。
创建用户秘钥
因为创建了新的用户账号,所以秘钥就不通过默认管理员创建了,此处切换新建的用户登录。
秘钥详情如下,至此测试准备内容完成。
{
"console": [
{
"access_key": "YDZXGAREEE0FWVGJLPC8",
"secret_key": "mVCw1twNhkl80ILKjooL+uIXuM3VancHMMjGtVUw"
}
]
}
此处简单的验证下minio
的连接访问,为了简便此处使用Node.js
环境进行测试。注意安装相关依赖npm install aws-sdk
(使用aws-sdk v2
版本的原因,是因为配合测试的onlyoffice
版本是7.3.3默认用的就是v2
版本)。
//引用aws-sdk
const aws = require('aws-sdk');
//配置 minio或s3
const config = {
region: "us-east-1",
endpoint: "http://192.168.95.131:9090",
accessKeyId: "YDZXGAREEE0FWVGJLPC8",//access_key
secretAccessKey: "mVCw1twNhkl80ILKjooL+uIXuM3VancHMMjGtVUw",//secret_key
s3ForcePathStyle: true
}
//加载配置信息
aws.config.update(config)
//创建客户端
const s3Client = new aws.S3()
//配置服务地址
s3Client.endpoint = new aws.Endpoint(config.endpoint);
//查看test桶根目录的文件,最多不超过10个文件
s3Client.listObjects({Bucket: 'test', MaxKeys: 10, Delimiter: '/',}, (err, data) => {
console.log(data)
})
查看执行结果,测试连接成功,test
桶中没有任何文件,可证明minio
测试环境没有问题。
"D:\Program Files\nodejs\node.exe" "D:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" test --scripts-prepend-node-path=auto
> test3@1.0.0 test
> node aws/v2_test.js
(node:31360) NOTE: The AWS SDK for JavaScript (v2) will enter maintenance mode
on September 8, 2024 and reach end-of-support on September 8, 2025.
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check blog post at https://a.co/cUPnyil
(Use `node --trace-warnings ...` to show where the warning was created)
{
IsTruncated: false,
Marker: '',
Contents: [],
Name: 'test',
Prefix: '',
Delimiter: '/',
MaxKeys: 10,
CommonPrefixes: []
}
Process finished with exit code 0
三、修改OnlyOffice
配置文件并重启
修改development-linux.json
配置文件,修改其中storage
节点的相关配置(默认是本地存储,只需要替换掉默认的配置即可),此处请参考onlyoffice
官方文档AWS S3
配置说明。
配置详细信息如下(注意minio
服务端口是9090,不要跟控制台9000端口搞混)。当服务重启后onlyoffice
将会把文件保存到minio
文件服务中test
桶的files
文件夹中。
{
"storage": {
"name": "storage-s3",
"region": "us-east-1",
"endpoint": "http://192.168.95.131:9090",
"bucketName": "test",
"storageFolderName": "files",
"urlExpires": 604800,
"accessKeyId": "YDZXGAREEE0FWVGJLPC8",
"secretAccessKey": "mVCw1twNhkl80ILKjooL+uIXuM3VancHMMjGtVUw",
"useRequestToGetUrl": true,
"useSignedUrl": true,
"sslEnabled": false,
"s3ForcePathStyle": true
}
}
接下来重启onlyoffice
服务(此处使用docker
图形化工具Portainer
偷个懒)。
四、验证切换minio
存储是否生效
首先启动官方示例Node.js
工程。访问http://127.0.0.1:3000
(由于本机运行所以此处使用127.0.0.1
),此处截图提前先切换了语言为中文。
接下来新建个文档看看,文件是否保存到了minio
中,为了效果看着好点,这里就选了excel。
注意重点不是这个文档,而是onlyoffice
服务是否将文件存储到了minio
文件服务中,接下来使用minio
控制台查看下test
桶中的文件信息。
备注
因为onlyoffice
本身就支持aws s3
,而minio
本身又兼容aws s3
。所以才会使用minio
来做文件存储,目前onlyoffice
仅支持本地存储和aws s3
存储。