Linux服务器部署MinIo详细流程+解决最新版ui无法设置存储桶权限(Bucket Policy)问题

5,670 阅读5分钟

最新版minio的web端ui已经不支持设置Bucket Policy,提供两种解决思路:

  1. 直接安装旧版本minio: wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2024-06-15T19-57-03Z -O minio, 其他步骤一样
  2. 安装minio客户端设置Bucket Policy:具体操作放在文末

MinIO部署教程

1. 下载安装MinIO

# 下载二进制文件
wget https://dl.min.io/server/minio/release/linux-amd64/minio

# 为 MinIO 设置执行权限
chmod +x minio

# 移动 MinIO 到 `/usr/local/bin`
# /usr/local/bin/ : 用于存放系统全局可执行文件,适用于安装的二进制程序
sudo mv minio /usr/local/bin/

# 设置MinIO存储路径
# /mnt/ : 这是一个常用于挂载外部存储和硬盘的目录。确保存储的数据不与系统文件混合
sudo mkdir -p /mnt/minio_data

2. 创建MinIO用户

作用:为 MinIO 创建一个专用用户,避免使用 root 用户来运行 MinIO。如果 MinIO 以 root 用户身份运行,它就能访问系统上的任何文件和资源。如果 MinIO 被攻击,攻击者也可以通过 root 用户获得对整个系统的完全控制。

# 创建 minio 用户
# `-r`:表示创建系统用户。系统用户通常用于运行服务或守护进程,通常不允许登录到系统中,且会被用于特定的任务或服务。
# `-s /bin/false`:设置该用户的 shell 为 `/false`。这意味着此用户将无法直接登录到系统,因为它的 shell 被设置为 `/false`,这会使得任何尝试登录该用户的行为失败。这是为了增加安全性,确保该用户只能执行特定的服务,而无法执行其他操作。
# 创建一个不可登录的系统用户 `minio`,专门用于运行 MinIO 服务
sudo useradd -r -s /bin/false minio

# 给MinIO存储路径设置用户权限
# 将 MinIO 数据存储目录的所有权交给 `minio` 用户,以确保该用户有权限读写该目录中的数据
sudo chown -R minio:minio /mnt/minio_data

3. 启动MinIO服务

在 Linux 系统中,启动 MinIO 时,可以选择手动启动创建服务来自动启动(推荐:自动启动)

手动启动

minio server /mnt/minio_data --console-address ":9001"

自动启动(使用 systemd 来管理 MinIO 服务)

  1. 创建 systemd 服务文件:创建 /etc/systemd/system/minio.service
sudo vi /etc/systemd/system/minio.service
  1. minio.service文件内容
[Unit]
Description=MinIO Object Storage
After=network.target

[Service]
Type=simple
User=minio
Environment="MINIO_MEMORY_LIMIT=128M"
ExecStart=/usr/local/bin/minio server /mnt/minio_data \
  --address ":9000" \
  --console-address ":9001" \
  --quiet
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=YourStrongPassword123!"

Restart=always
LimitNOFILE=65536
MemoryLimit=128M

[Install]
WantedBy=multi-user.target
  1. minio.service内容解释
  • Description: 为服务提供了一个简短的描述,“MinIO Object Storage” 让人知道这个服务启动的是 MinIO 对象存储。

  • After=network.target: 确保 MinIO 服务在网络启动后才启动。network.target 是一个目标单元,表示网络配置已经完成。这样可以避免在网络未完全就绪时启动 MinIO。

  • Type=simplesystemd 会认为服务是一个简单的进程,直到 ExecStart 命令完成。对于 MinIO,这种类型是适合的,因为它会在前台运行并且永不退出。

  • User=root: 这表示 MinIO 将以 root 用户身份启动。为了安全性,通常建议不要以root 身份运行生产环境中的服务,应该创建一个专用的 minio 用户来运行该服务

  • ExecStart: 这个指令指定了启动 MinIO 的命令。它会启动 MinIO 服务,并指定存储目录 /minio,绑定地址 :9000 用于数据接口,9001 用于控制台界面。

  • --address ":9000" : MinIO 将监听 9000 端口来提供对象存储服务。

  • --console-address ":9001" : 控制台界面将运行在 9001 端口。

  • --quiet: 启动时不输出冗余日志。

  • Environment="MINIO_ROOT_USER=admin"

  • Environment="MINIO_ROOT_PASSWORD=YourStrongPassword123!" : 这两行设置了 MinIO 的根用户和密码。你可以通过这些环境变量控制 MinIO 的管理员账号。

  • Restart=always: 如果 MinIO 崩溃或停止运行,systemd 会自动重新启动该服务。

  • LimitNOFILE=65536: 限制每个进程的文件描述符数为 65536。这对于高并发服务(如 MinIO)是非常重要的,确保在高负载情况下不会因为打开的文件句柄过多而导致问题。

  • WantedBy=multi-user.target: 这表示 MinIO 服务将在系统启动时自动启动。multi-user.target 是一个常见的目标,表示在系统进入多用户模式时启动服务。

  1. 启动服务
# 加载 systemd 配置
sudo systemctl daemon-reload

# 启动 MinIO 服务
sudo systemctl start minio

# 设置开机自启
sudo systemctl enable minio

# 查看服务状态
sudo systemctl status minio

出现如下内容,表示成功了

● minio.service - MinIO Object Storage
     Loaded: loaded (/etc/systemd/system/minio.service; enabled; preset: disabled)
     Active: active (running) since Fri 2025-05-30 11:04:01 CST; 11s ago
   Main PID: 2651761 (minio)
      Tasks: 8 (limit: 2010)
     Memory: 127.8M (limit: 128.0M peak: 128.0M swap: 167.1M swap peak: 167.3M)
        CPU: 1.201s
     CGroup: /system.slice/minio.service
             └─2651761 /usr/local/bin/minio server /mnt/minio_data --address :9000 --console-address :9001 --quiet

4. 最后

使用xxx.xxx.xx.xx:9001 自己的服务器地址访问9001端口进行访问,记得开放9000-9001访问权限

5. minio客户端

  1. 安装 MinIO 客户端
# 下载 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc

# 设置执行权限
chmod +x /usr/local/bin/mc
  1. 配置访问别名
mc alias set myminio http://localhost:9000 admin YourStrongPassword123!
  1. 设置 Bucket Policy
# 设置整个存储桶为公开可读
mc anonymous set download myminio/你的桶名称

# 示例:设置 user-uploads 桶为公开可读
mc anonymous set download myminio/user-uploads
  1. 权限解释

推荐使用 download权限,这样前端可以使用ip:9000/桶名称/xxx.jpg形式进行访问,后端可以通过Access Key 和 Secret Key 进行认证来进行读取和上传操作。

nonemc anonymous set none私有桶(默认)
downloadmc anonymous set download仅允许下载
uploadmc anonymous set upload允许上传(不推荐公开)
publicmc anonymous set public读写公开(慎用)