最新版minio的web端ui已经不支持设置Bucket Policy,提供两种解决思路:
- 直接安装旧版本minio:
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2024-06-15T19-57-03Z -O minio, 其他步骤一样- 安装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 服务)
- 创建
systemd服务文件:创建/etc/systemd/system/minio.service
sudo vi /etc/systemd/system/minio.service
- 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
- minio.service内容解释
-
Description: 为服务提供了一个简短的描述,“MinIO Object Storage” 让人知道这个服务启动的是 MinIO 对象存储。
-
After=network.target: 确保 MinIO 服务在网络启动后才启动。
network.target是一个目标单元,表示网络配置已经完成。这样可以避免在网络未完全就绪时启动 MinIO。 -
Type=simple:
systemd会认为服务是一个简单的进程,直到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是一个常见的目标,表示在系统进入多用户模式时启动服务。
- 启动服务
# 加载 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客户端
- 安装 MinIO 客户端
# 下载 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc
# 设置执行权限
chmod +x /usr/local/bin/mc
- 配置访问别名
mc alias set myminio http://localhost:9000 admin YourStrongPassword123!
- 设置 Bucket Policy
# 设置整个存储桶为公开可读
mc anonymous set download myminio/你的桶名称
# 示例:设置 user-uploads 桶为公开可读
mc anonymous set download myminio/user-uploads
- 权限解释
推荐使用
download权限,这样前端可以使用ip:9000/桶名称/xxx.jpg形式进行访问,后端可以通过Access Key和Secret Key进行认证来进行读取和上传操作。
none | mc anonymous set none | 私有桶(默认) |
|---|---|---|
download | mc anonymous set download | 仅允许下载 |
upload | mc anonymous set upload | 允许上传(不推荐公开) |
public | mc anonymous set public | 读写公开(慎用) |