一、安装
docker
docker pull minio/minio:latest
DOCKER_NAME=minio
MINIO_ACCESS_KEY=admin
MINIO_SECRET_KEY=admin123
mkdir -p /data/$DOCKER_NAME/data
mkdir -p /data/$DOCKER_NAME/conf
docker run --name $DOCKER_NAME \
-p 9000:9000 \
-d \
-e "MINIO_ACCESS_KEY=$MINIO_ACCESS_KEY" \
-e "MINIO_SECRET_KEY=$MINIO_SECRET_KEY" \
-v /data/$DOCKER_NAME/data:/data \
-v /data/$DOCKER_NAME/conf:/root/.minio \
minio/minio server /data
# 客户端
docker pull minio/mc
docker run -it --entrypoint=/bin/sh minio/mc
mc config host add myminio http://192.168.0.1:9000 $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
# 配置指定桶开放下载
mc policy set public myminio/backup
源码
...
二、mc客户端使用
bucket桶策略
cat > getonly.json << EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ // 可以做出的行动(权限)
"s3:ListAllMyBuckets", // 查看所有的“桶”列表
"s3:ListBucket", // 查看桶内的对象列表
"s3:GetBucketLocation",
"s3:GetObject", // 下载对象
"s3:PutObject", // 上传对象
"s3:DeleteObject" // 删除对象
],
"Resource": [
"arn:aws:s3:::my-bucketname/*" // (应用到的资源,*表示所有,也可以用路径来控制范围。arn:aws:s3是命名空间)
],
"Sid": ""
}
]
}
EOF
# 添加该策略
mc admin policy add myminio getonly getonly.json
管理用户
# 创建用户
mc admin user add myminio newuser password
# 授权策略
mc admin policy set myminio getonly user=newuser
# 禁用用户
mc admin user disable myminio newuser
# 列出所有用户
mc admin user list myminio
管理组
# 创建组
mc admin group add myminio newgroup newuser
# 授权策略
mc admin policy set myminio getonly group=newgroup
#
# 禁用组
mc admin group disable myminio newgroup
# 列出所有组
三、使用问题
1、分享链接无法访问
nginx代理配置
server {
listen 80;
server_name minio.maruifu.cn;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9000;
}
}
配置bucket访问权限
minio默认bucket无读取和写入权限
1、点击三个点按钮
2、编辑策略
3、添加权限
三、API
1、golang
文档地址:
https://docs.minio.io/docs/golang-client-quickstart-guide.html
连接minio服务器
package main
import (
"log"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
func main() {
endpoint := "minio.dongzi.online"
accessKeyID := "dongdonghe" // ID
secretAccessKey := "19981014" // Secret
useSSL := false // ssl配置
// Initialize minio client object.
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
if err != nil {
log.Fatalln(err)
}
log.Printf("%#v\n", minioClient) // minioClient is now setup
}
创建bucket
func createBucket(mc *minio.Client, bucketName string) (err error) {
err = mc.MakeBucket(context.Background(), bucketName, minio.MakeBucketOptions{Region: "us-east-1", ObjectLocking: false}) // Region : 存储桶(us-east-1:默认)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Successfully created mybucket.")
return
}
列出所有bucket
func listBucket(mc *minio.Client) (err error) {
buckets, err := mc.ListBuckets(context.Background())
if err != nil {
fmt.Println(err)
return
}
for _, bucket := range buckets {
fmt.Printf("bucket名称:%s,创建时间:%s\n", bucket.Name, bucket.CreationDate)
}
return
}
检查bucket是否存在
func bucketExits(mc *minio.Client, bucketName string) (err error) {
found, err := mc.BucketExists(context.Background(), bucketName)
if err != nil {
fmt.Println(err)
return
}
if found {
fmt.Println("Bucket found")
} else {
fmt.Println("Bucket not found")
}
return
}
删除bucket
func deleteBucket(mc *minio.Client, bucketName string) (err error) {
err = mc.RemoveBucket(context.Background(), bucketName)
if err != nil {
fmt.Println(err)
return
}
return
}
获取bucket文件对象列表
func listObjs(mc *minio.Client, bucketName string) (err error) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
objectCh := mc.ListObjects(ctx, bucketName, minio.ListObjectsOptions{
Prefix: "制图", // 前缀条件
Recursive: true, // 循环
})
for object := range objectCh {
if object.Err != nil {
fmt.Println(object.Err)
return
}
fmt.Printf("文件名:%s,大小:%verb", object.Key, object.Size)
}
return
}
上传文件
func uploadObject(mc *minio.Client, bucketName, objectName string, filePath string, contentType string) {
n, err := mc.FPutObject(context.Background(),
bucketName, // bucket
objectName, // 上传文件名称
filePath, // 上传文件地址
minio.PutObjectOptions{ContentType: contentType}) // 上传文件类型
if err != nil {
log.Fatalln(err)
}
log.Printf("Successfully uploaded %s of size %d byte \n", objectName, n.Size)
}
本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2021/02/23 10:03