这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
基于大项目推视频流的需求,学习并应用minio,总结最近用下来的一些踩坑。
minio启动
基于大项目的框架结构为kitex-hertz,win11下需要安装wsl2,然后在可以安装桌面版docker(docker-desktop)去连接wsl2。这样使得wsl2里面的docker环境和docker-desktop一致。
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
镜像启动成功:
开始踩坑
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的情况
- 这是minioUrl = 172.27.28.184(wsl2虚拟机的ip)
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,不然其他接口将无法下载连接。
总结
看似一个localhost的小问题,卡了许久,一度以为docker-compose出现问题。继续加油。