在 CentOS 上部署 MinIO 对象存储服务并不复杂。下面我整理了一份详细的部署教程,涵盖了从单机部署到生产环境的一些关键考量。
1. 环境准备
开始前,请确保 CentOS 系统已更新并安装了必要的工具。
sudo yum update -y
sudo yum install -y wget
2. 下载与安装 MinIO
从 MinIO 官网下载最新的二进制文件(适用于 Linux AMD64 架构),并将其放到系统的可执行路径下。
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio # 添加可执行权限
sudo mv minio /usr/local/bin/ # 需要 root 权限移动文件
3. 创建数据目录并设置权限
为 MinIO 创建一个专门的数据存储目录,并建议为其创建一个专用的系统用户和组(如 minio-user
和 minio-group
),并将目录的所有权赋予该用户,这有助于增强安全性。
sudo mkdir -p /data/minio # 创建数据目录
sudo groupadd -r minio-group # 创建 minio 用户组
sudo useradd -r -g minio-group -s /sbin/nologin minio-user # 创建 minio 用户,并禁止登录
sudo chown -R minio-user:minio-group /data/minio # 更改数据目录所有者
ls -ld /data/minio # 查看目录权限
sudo chown -R minio-user:minio-group /data/minio # 更改数据目录所有者
sudo chmod -R u+rwx /data/minio #确保用户(owner)权限包含 w(写入)
4. 配置访问密钥(可选但重要)
MinIO 默认使用 minioadmin
作为 root 用户和密码。在生产环境中,务必修改这些默认凭证。
你可以通过环境变量来设置新的访问密钥(Access Key)和秘密密钥(Secret Key):
export MINIO_ROOT_USER=your_secure_access_key
export MINIO_ROOT_PASSWORD=your_very_strong_secret_key
5. 启动 MinIO 服务器
可以选择直接启动或通过 systemd 服务管理 MinIO,后者更适合生产环境,能实现开机自启和故障重启。
方式一、直接启动(适合快速测试):
# 在命令行中直接指定数据目录启动,控制台端口默认为9001
minio server /data/minio --console-address ":9001"
启动成功后,终端会输出访问地址、RootUser 和 RootPass(即设置的或默认的密钥),以及 Console(Web控制台)地址:
方式二 创建 Systemd 服务(推荐用于生产环境):
- 检查
/etc/default/minio
配置文件
(1) 首先确保MinIO的环境变量配置文件存在且设置正确。这个文件用于定义MinIO服务启动时所需的关键参数。
执行命令:
cat /etc/default/minio
需要确认的内容:
MINIO_VOLUMES
:必须设置,且指向一个已存在的目录(例如 /data/minio)。这是MinIO存储数据的地方。MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
:设置管理员凭据。如果未设置,MinIO会使用默认的 minioadmin/minioadmin,但强烈建议修改。MINIO_OPTS
或MINIO_CONSOLE_ADDRESS
:用于配置控制台端口,例如 --console-address :9001。
(2) 如果文件不存在或配置不全:
sudo tee /etc/default/minio > /dev/null << 'EOF'
# MinIO 存储路径(必须设置)
MINIO_VOLUMES="/data/minio"
# MinIO 根用户和密码
MINIO_ROOT_USER="your_secure_username"
MINIO_ROOT_PASSWORD="your_very_strong_password"
# MinIO 控制台地址和端口
MINIO_CONSOLE_ADDRESS=":9001"
EOF
请务必将 your_secure_username 和 your_very_strong_password 替换为你自己的设置。
- 创建服务文件
minio.service
sudo vim /etc/systemd/system/minio.service
写入以下配置(minio.service):
[Unit]
Description=MinIO Server
Documentation=https://docs.min.io
After=network.target
[Service]
# 指定运行服务的用户和组
User=minio-user
Group=minio-group
# 加载环境变量文件(新增此行)
EnvironmentFile=/etc/default/minio
# 启动MinIO服务器,使用环境变量文件中的参数
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
- 重新加载 systemd 并启动服务:
# 重新加载 systemd 配置
sudo systemctl daemon-reload
sudo systemctl enable minio # 设置开机自启
sudo systemctl start minio # 启动服务
sudo systemctl status minio # 检查状态
sudo systemctl restart minio # 重新启动服务(若失败时执行)
- 查看详细日志
如果启动再次失败,查看详细日志是定位问题关键:
journalctl -u minio -xe --no-pager
6. 配置防火墙
如果系统启用了防火墙(如 firewalld),需要开放 MinIO 服务端口(默认 9000)和控制台端口(如 9001)。
sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp # 服务端口
sudo firewall-cmd --permanent --zone=public --add-port=9001/tcp # 控制台端口
sudo firewall-cmd --reload
7. 访问与验证
部署完成后,打开浏览器,访问 http://<服务器IP地址>:9001
,使用设置的 MINIO_ROOT_USER
和 MINIO_ROOT_PASSWORD
登录 MinIO 控制台。
8. (可选)安装与配置 MinIO 客户端 mc
mc
是 MinIO 的命令行客户端,便于管理。
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
- 配置 mc 连接到你的 MinIO 服务器(别名可自定义,如 myminio):
mc alias set myminio http://localhost:9000 your_secure_access_key your_very_strong_secret_key
# 例如配置别名,连接你的 MinIO 服务器
mc alias set myminio http://服务器IP:9000 minioadmin minioadmin
3. 浏览器访问资源
通过浏览器访问 http://<你的MinIO服务器地址>:9000/my-bucket/
某个文件名 验证是否成功
http://192.168.0.1:9000/my-bucket/3a36fe1a301d41c4a7c72d6100cb4410_1533815935.png
- 使用 mc 命令管理存储桶和对象,例如:
mc ls myminio # 列出存储桶
mc mb myminio/my-bucket # 创建存储桶
mc cp local-file.txt myminio/my-bucket/ # 上传文件
mc policy set public myminio/my-bucket 将 my-bucket 设置为公共读权限
- 其他设置 Bucket 策略:
mc anonymous set download myminio/存储桶名 #设置整个 Bucket 为公共读 (允许匿名下载)
mc policy set download myminio/存储桶名 # 旧版本命令
mc anonymous set download myminio/存储桶名/public/ #设置特定前缀(目录)为公共读
mc anonymous reset myminio/你的存储桶名 #移除公共访问权限
- 使用 JSON 策略文件(用于复杂设置)
对于更精细的权限控制,例如只允许访问某个特定前缀下的对象,可以编写 JSON 策略文件。
- 示例策略 (允许任何人下载 public/ 目录下的所有对象):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": ["*"]},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::存储桶名/public/*"]
}
]
}
• 应用策略: 将上述 JSON 保存为 policy.json 后应用
mc policy set-json policy.json myminio/存储桶名