单机Docker部署MinIO(修改域名与端口+LDAP接入)

为了解决部分组件的数据存储问题,最近在测试环境部署了一套MinIO,同时小小的踩坑了一下mc命令。在这里记录一下踩坑过程。

核心目标有:

  • 启动容器并设置账号密码、挂载数据到本地
  • 设置MinIO和Console的服务端口,并映射到外部
  • 配置MinIO的分享链接的域名(自动创建的Share URL)
  • 配置允许LDAP用户登录MinIO

Docker镜像

在DockerHub上搜索MinIO,出现在前排的都是bitnami/minio和elestio/minio等也算是官方的镜像,但是原味的镜像minio/minio却不在前面,不是很理解为什么。这里给出原味的minio的链接:https://hub.docker.com/r/minio/minio

启动容器

因为单机启动参数相对较少,这里参考官方文档直接用命令启动:https://min.io/docs/minio/container/index.html#procedure

有个问题,该使用MINIO_ROOT_USER还是MINIO_ACCESS_KEY并不清楚,貌似都可以

sudo docker run -itd \
-p 9090:9090-p 9000:9000\
--name minio --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=<password>" \
-v /path/to/data:/data \
minio/minio  server /data --console-address ":9090" -address ":9000"

这里的存在两个端口,一个是web页面(Console)的服务端口9090,一个是对象存储(MinIO)的API接口9000,这里可以直接用不同的端口启动,但是一定要区分清楚容器内网的端口是否发生转换,因为mc命令和Console是默认连接http://127.0.0.1:9000这个链接,如果API端口发生了改变,需要使用`mc alias`根据环境切换(后面会讲)

这里有个坑,如果在启动时指定了uid,会导致容器启动后进入内运行mc命令时没有权限创建文件,而且无法提权。需要在容器启动前处理好容器内外目录的挂载权限。报错信息如下:

mc: <ERROR> Unable to save new mc config. mkdir /.mc: permission denied.

修改服务端口

服务启动时的端口需要在启动Docker时的命令行参数中设置,只配置环境变量是无效的!环境变量仅影响服务在运行时,外显的URL信息,不会直接影响服务的运行端口。尤其当需要代理服务实现端口转换或者路径组合时,这个区别尤为重要。

修改启动命令实现服务端口的修改。

server /data -address ":12819" --console-address ":25619"

此时在mc alias list中连接的S3后端服务(如local)就应该使用http(s)://<hostname>:12819来配置了(强调端口,不限制协议和域名)

先通过docker进入容器内的命令行

docker exec -it minio bash

查询所有配置的对象存储桶。

sh-4.4# mc alias list
gcs
  URL       : https://storage.googleapis.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v2
  Path      : dns

local
  URL       : http://localhost:9000
  AccessKey :
  SecretKey :
  API       :
  Path      : auto

play
  URL       : https://play.min.io
  AccessKey : Q3AM3UQ867SPQ
  SecretKey : zuf+tfteSlswRu7BJ86wekitnifILb
  API       : S3v4
  Path      : auto

s3
  URL       : https://s3.amazonaws.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v4
  Path      : dns

这里的local理论上就是本机的MinIO,但是如果端口被修改过,需要删除并重新添加

mc alias remove local
mc alias set local http://localhost:12819 admin <password>

修改后mc alias list被修改为如下内容

gcs
  URL       : https://storage.googleapis.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v2
  Path      : dns

local
  URL       : http://localhost:12819
  AccessKey : admin
  SecretKey : <password>
  API       : s3v4
  Path      : auto

play
  URL       : https://play.min.io
  AccessKey : Q3AM3UQ867SPQQA43P2F
  SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
  API       : S3v4
  Path      : auto

s3
  URL       : https://s3.amazonaws.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v4
  Path      : dns

此处配置错误会导致Console访问MinIO时报错:

mc: <ERROR> Unable to list user. Get "http://localhost:9000/minio/admin/v3/list-users": dial tcp 127.0.0.1:9000: connect: connection refused.

然后就可以正常使用mc命令操作本地的MinIO,教程里的myminio其实就是local。

配置Console前端Share分享链接域名

为了修改在前端Console中配置的URL信息,避免在分享链接中使用localhost等内网域名。可以配置环境变量来实现。(此处使用的域名可以和mc alias list中使用的不同)环境变量中添加:

-e "MINIO_SERVER_URL=http://example.com:12819"
-e "MINIO_BROWSER_REDIRECT_URL=http://example.com:25619"

MINIO_SERVER_URL会影响前端的分享链接和Console访问MinIO的请求地址,在登录时会依赖该URL访问MinIO,如果此处配置TLS证书,则需要在容器内也做TLS配置来实现安全访问。

MINIO_BROWSER_REDIRECT_URL会影响前端代理的访问路径,可以通过加后缀的方式在同一个域名下做代理路由,例如加/console/后缀。

在此配置https会和仅配置http不一样,建议使用Nginx代理来加SSL证书。

LDAP服务连接

注意,使用LDAP后会导致管理页面内用户和组页面不可见,除了admin用户,其他登录请求将都会查询LDAP服务。

在管理页面配置LDAP服务器信息,如果服务器有TLS证书,请勿开启 Insecure 会导致链接报错。

查询域要根据不同LDAP服务器配置,这里给出我的组织结构供参考

User DN Search Base:     dc=wolfbolin,dc=com
User DN Search Filter:   (cn=%s)
Group Search Base DN:    ou=people,dc=wolfbolin,dc=com
Group Search Filter:     (memberUid=%s)

给LDAP用户添加全局管理员权限(consoleAdmin)

系统在初始化的时候已经创建了consoleAdmin、readonly、readwrite等权限,可以直接使用。也可以创建更复杂的策略后再赋给指定的用户。

mc idp ldap policy attach local consoleAdmin --user='cn=wolflin,ou=people,dc=wolfbolin,dc=com'

然后就可以使用用户名(wolflin)和密码直接登录MinIO面板或者调用API了。

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注