Files
open-im-server/internal/api/third/minio_init.go
T

102 lines
4.3 KiB
Go
Raw Normal View History

2022-02-19 18:48:15 +08:00
package apiThird
import (
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/log"
"Open_IM/pkg/utils"
"context"
2022-08-01 15:27:51 +08:00
"fmt"
2022-02-19 18:48:15 +08:00
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
url2 "net/url"
)
2022-03-23 15:44:34 +08:00
var (
2022-05-10 10:44:43 +08:00
MinioClient *minio.Client
2022-03-23 15:44:34 +08:00
)
2022-03-04 14:27:54 +08:00
func MinioInit() {
2022-04-05 19:31:35 +08:00
operationID := utils.OperationIDGenerator()
2022-04-05 19:48:31 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "minio config: ", config.Config.Credential.Minio)
2022-04-11 16:18:36 +08:00
var initUrl string
if config.Config.Credential.Minio.EndpointInnerEnable {
initUrl = config.Config.Credential.Minio.EndpointInner
} else {
initUrl = config.Config.Credential.Minio.Endpoint
}
log.NewInfo(operationID, utils.GetSelfFuncName(), "use initUrl: ", initUrl)
minioUrl, err := url2.Parse(initUrl)
2022-02-19 18:48:15 +08:00
if err != nil {
2022-04-05 19:31:35 +08:00
log.NewError(operationID, utils.GetSelfFuncName(), "parse failed, please check config/config.yaml", err.Error())
2022-02-19 18:48:15 +08:00
return
}
2022-05-10 16:04:26 +08:00
opts := &minio.Options{
2022-08-01 11:49:50 +08:00
Creds: credentials.NewStaticV4(config.Config.Credential.Minio.AccessKeyID, config.Config.Credential.Minio.SecretAccessKey, ""),
//Region: config.Config.Credential.Minio.Location,
2022-05-10 16:04:26 +08:00
}
if minioUrl.Scheme == "http" {
opts.Secure = false
} else if minioUrl.Scheme == "https" {
opts.Secure = true
}
2022-04-05 19:49:49 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "Parse ok ", config.Config.Credential.Minio)
2022-05-10 16:04:26 +08:00
MinioClient, err = minio.New(minioUrl.Host, opts)
2022-04-05 19:49:49 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "new ok ", config.Config.Credential.Minio)
2022-02-19 18:48:15 +08:00
if err != nil {
2022-04-05 19:31:35 +08:00
log.NewError(operationID, utils.GetSelfFuncName(), "init minio client failed", err.Error())
2022-02-19 18:48:15 +08:00
return
}
opt := minio.MakeBucketOptions{
2022-08-01 14:33:01 +08:00
Region: config.Config.Credential.Minio.Location,
}
if config.Config.Credential.Minio.IsDistributedMod == true {
opt.ObjectLocking = true
2022-02-19 18:48:15 +08:00
}
2022-05-10 10:44:43 +08:00
err = MinioClient.MakeBucket(context.Background(), config.Config.Credential.Minio.Bucket, opt)
2022-02-19 18:48:15 +08:00
if err != nil {
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "MakeBucket failed ", err.Error())
2022-05-10 10:44:43 +08:00
exists, err := MinioClient.BucketExists(context.Background(), config.Config.Credential.Minio.Bucket)
if err == nil && exists {
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "We already own ", config.Config.Credential.Minio.Bucket)
2022-05-10 10:44:43 +08:00
} else {
if err != nil {
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), err.Error())
2022-05-10 10:44:43 +08:00
}
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "create bucket failed and bucket not exists")
2022-05-10 10:44:43 +08:00
return
}
}
// make app bucket
err = MinioClient.MakeBucket(context.Background(), config.Config.Credential.Minio.AppBucket, opt)
if err != nil {
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "MakeBucket failed ", err.Error())
2022-05-10 10:44:43 +08:00
exists, err := MinioClient.BucketExists(context.Background(), config.Config.Credential.Minio.Bucket)
2022-02-19 18:48:15 +08:00
if err == nil && exists {
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "We already own ", config.Config.Credential.Minio.Bucket)
2022-02-19 18:48:15 +08:00
} else {
2022-02-28 17:52:13 +08:00
if err != nil {
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), err.Error())
2022-02-28 17:52:13 +08:00
}
2022-06-30 17:12:25 +08:00
log.NewInfo(operationID, utils.GetSelfFuncName(), "create bucket failed and bucket not exists")
2022-02-19 18:48:15 +08:00
return
}
}
2022-08-01 14:56:20 +08:00
policy, err := MinioClient.GetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket)
log.NewInfo("", utils.GetSelfFuncName(), policy)
2022-03-02 19:07:17 +08:00
// 自动化桶public的代码
2022-08-01 15:27:51 +08:00
policyJsonString := fmt.Sprintf(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject","s3:PutObject"],
"Effect": "Allow","Principal": {"AWS": ["*"]},"Resource": ["arn:aws:s3:::%s/*"],"Sid": ""}]}`, config.Config.Credential.Minio.Bucket)
err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.Bucket, policyJsonString)
if err != nil {
log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error())
}
policyJsonString = fmt.Sprintf(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject","s3:PutObject"],
"Effect": "Allow","Principal": {"AWS": ["*"]},"Resource": ["arn:aws:s3:::%s/*"],"Sid": ""}]}`, config.Config.Credential.Minio.AppBucket)
err = MinioClient.SetBucketPolicy(context.Background(), config.Config.Credential.Minio.AppBucket, policyJsonString)
if err != nil {
log.NewInfo("", utils.GetSelfFuncName(), "SetBucketPolicy failed please set in web", err.Error())
}
log.NewInfo(operationID, utils.GetSelfFuncName(), "minio create and set policy success")
2022-02-19 18:48:15 +08:00
}