大项目minio踩坑日记| 青训营笔记

550 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

基于大项目推视频流的需求,学习并应用minio,总结最近用下来的一些踩坑。

minio启动

基于大项目的框架结构为kitex-hertz,win11下需要安装wsl2,然后在可以安装桌面版docker(docker-desktop)去连接wsl2。这样使得wsl2里面的docker环境和docker-desktop一致。

image.png

docker-compose

为了实现环境的一键启动,编写docker-compose.yaml文档,使用命令docker compose up -d 一键pull、run images。

# Minio
minio:
  image: 'minio/minio:latest'
  volumes:
    - "./minio/data1:/data1"
    - "./minio/data2:/data2"
  command: server --console-address ":9090" http://minio/data{1...2}
  environment:
    - MINIO_ROOT_USER=minio
    - MINIO_ROOT_PASSWORD=minio123
  ports:
    - "9000:9000"
    - "9090:9090" #console控制台
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
    interval: 30s
    timeout: 20s
    retries: 3
  restart: always

镜像启动成功:

image.png

开始踩坑

go初始化连接minio

func Init_minio() {
    minioEndpoint := shared.MinioUrl + ":" + shared.MinioPort

    minioClient, err := minio.New(minioEndpoint,
       &minio.Options{Creds: credentials.NewStaticV4(shared.MinioAccessKey, shared.MinioSecretKey, "")})
    if err != nil {
       klog.Fatalf("connect minio server fail %s url %s ", err.Error(), minioEndpoint)
       return
    }
}

minio配置

//minio
MinioUrl       = "172.27.28.184" //这个地方需要用虚拟机ip。不能用localhost,否则客户端不播放视频
MinioPort      = "9000"
MinioAccessKey = "minio"
MinioSecretKey = "minio123"

MinioLocation = "cn-northwest-1"

其中minioUrl必须使用虚拟机ip,不能使用localhost,否则客户端不会播放视频,但是能够正常的存储视频。

  • 这是minioUrl = localhost的情况 image.png
  • 这是minioUrl = 172.27.28.184(wsl2虚拟机的ip) image.png

minio桶配置学习

//设置桶策略
policy := `{"Version": "2012-10-17",
         "Statement": 
            [{
               "Action":["s3:GetObject"],
               "Effect": "Allow",
               "Principal": {"AWS": ["*"]},
               "Resource": ["arn:aws:s3:::` + bucketName + `/*"],
               "Sid": ""
            }]
         }`
err = minioClient.SetBucketPolicy(ctx, bucketName, policy)
if err != nil {
   log.Errorf("SetBucketPolicy %s  err:%s", bucketName, err.Error())
}

设置桶策略,可以不用去minio里面创建的桶单独去点击Access Policy改成public,不然其他接口将无法下载连接。

image.png

总结

看似一个localhost的小问题,卡了许久,一度以为docker-compose出现问题。继续加油。