4 minutes reading time
前面的文章讲了Fly.io 的入门使用和如何使用 Fly.io 部署 go 开发的应用程序。今天我们来继续讲解使用 Fly.io 部署 对象存储服务 MinIO.
MinIO 是什么我就不过多介绍了, 接下来我们就进入正题,进行 MinIO 服务的部署。
我们先准备 MinIO docker 部署相关的文件, 我们使用官方的镜像进行部署, Dockerfile 文件内容如下:
FROM minio/minio
CMD [ "server", "/data", "--console-address", ":9001"]
MinIO 的数据文件将存储在 data 目录下,指定 9001 为 web 控制台的端口,如果不指定将会使用随机端口。
接下来像以前一样使用 flyctl launch
命令进行应用的初始化。
我们照常不使用数据库,不立即部署,生成的配置如下:
# fly.toml file generated for twilight-lake-5450 on 2022-11-19T22:34:39+08:00
= "twilight-lake-5450"
= "SIGINT"
= 5
= []
[]
[]
= []
= true
[[]]
= []
= 8080
= ["app"]
= "tcp"
= []
[]
= 25
= 20
= "connections"
[[]]
= true
= ["http"]
= 80
[[]]
= ["tls", "http"]
= 443
[[]]
= "1s"
= "15s"
= 0
= "2s"
如果我们要限制从公网连接 MinIO ,只允许和 MinIO 使用相同网络的应用访问,只要删除 [[services]] 下的内容即可。
Fly.io 应用部署的vm 和 image 是临时的, 每当你删除或移动应用程序时,当前应用写入的数据就会丢失,为了保持数据,我们要创建存储卷来持久化数据。
我们使用 flyctl vol create miniodata
来创建持久化存储,需要注意的是存储卷要和 MinIO 应用要在同一个区域。
由于没有指定大小,默认使用 3GB 的大小。我们需要在应用配置中,将刚创建的存储卷挂载进应用中。
[]
= "miniodata"
= "/data"
MinIO 使用 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 环境变量来存储管理员的登录信息,为了安全起见,我们不能使用普通的环境变量直接设置,而是使用 Fly secret 来设置账号密码,使用 flyctl 设置的敏感信息,只会在真正使用时解密。
flyctl secrets set MINIO_ROOT_USER=xxx MINIO_ROOT_PASSWORD=xxx
接下来我们执行 flyctl deploy 进行应用的部署。
MinIO 提供了一个 dashboard ,它使用我们前面 Dockerfile 指定的端口,我们前面设置端口为 9001 ,由于 fly,io 限制了对标准端口的访问,我们需要连接到我们的私有 WireGuard 网络。
有2个方法可以进行连接: 1 设置一个常规的 WireGuard 隧道 2 将端口代理到我们的本地,就像 k8s 的kubectl proxy 一样
由于我对 WireGuard 不熟悉,这里我将使用第二种方法进行,我们使用 flyctl proxy 9001
命令将端口代理到我本地。我们浏览器访问 http://localhost:9001/ 即可看到我们熟悉的界面(访问有点慢)
Console 的用户名密码是我们前面设置的 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 的值。进入后我们可以创建存储桶、进行管理以及上传和下载文件。
本文我介绍了怎么样在 fly.io 上部署 MinIO 服务的过程,在实际过程中,我遇到了一些问题,你们在遇到问题时可以使用 flyctl logs 命令查看部署过程中的问题。