本文目录导读:

MinIO自动配置脚本
#!/bin/bash
# ============================================
# MinIO 自动配置脚本
# 支持 Linux (amd64/arm64) 和 macOS
# ============================================
set -e
# ----- 配置参数 -----
MINIO_VERSION="latest" # 或指定版本如 "RELEASE.2024-01-13T07-53-03Z"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="minio12345"
MINIO_VOLUME="/data/minio"
MINIO_PORT=9000
MINIO_CONSOLE_PORT=9001
# 自动检测架构
ARCH=$(uname -m)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
case "$ARCH" in
x86_64) ARCH="amd64" ;;
aarch64) ARCH="arm64" ;;
armv7l) ARCH="arm" ;;
*) echo "不支持的架构: $ARCH"; exit 1 ;;
esac
echo "✅ 检测系统: $OS/$ARCH"
# ----- 1. 安装 MinIO -----
install_minio() {
echo "📥 正在下载 MinIO..."
if [ "$MINIO_VERSION" = "latest" ]; then
DOWNLOAD_URL="https://dl.min.io/server/minio/release/${OS}-${ARCH}/minio"
else
DOWNLOAD_URL="https://dl.min.io/server/minio/release/${OS}-${ARCH}/archive/minio.${MINIO_VERSION}"
fi
# 下载 MinIO 二进制文件
wget -q "$DOWNLOAD_URL" -O /tmp/minio || curl -sL "$DOWNLOAD_URL" -o /tmp/minio
if [ ! -f /tmp/minio ]; then
echo "❌ 下载失败,请检查网络连接"
exit 1
fi
# 安装到系统路径
sudo mv /tmp/minio /usr/local/bin/minio
sudo chmod +x /usr/local/bin/minio
echo "✅ MinIO 已安装: $(minio --version)"
}
# ----- 2. 创建数据和配置目录 -----
setup_directories() {
echo "📁 创建数据和配置目录..."
sudo mkdir -p "$MINIO_VOLUME"
sudo mkdir -p /etc/minio
sudo mkdir -p /var/log/minio
# 创建运行用户(如果不存在)
if ! id -u minio-user &>/dev/null; then
sudo useradd -r -s /sbin/nologin -M minio-user
fi
sudo chown -R minio-user:minio-user "$MINIO_VOLUME" /etc/minio /var/log/minio
echo "✅ 目录创建完成"
}
# ----- 3. 配置环境变量 -----
configure_env() {
echo "🔧 配置 MinIO 环境变量..."
sudo tee /etc/default/minio > /dev/null <<EOF
# MinIO 配置文件
MINIO_ROOT_USER=${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
MINIO_VOLUMES="${MINIO_VOLUME}"
MINIO_OPTS="--address :${MINIO_PORT} --console-address :${MINIO_CONSOLE_PORT}"
EOF
sudo chown minio-user:minio-user /etc/default/minio
echo "✅ 环境变量配置完成"
}
# ----- 4. 创建 systemd 服务(Linux)-----
create_systemd_service() {
echo "🛠️ 创建 systemd 服务..."
sudo tee /etc/systemd/system/minio.service > /dev/null <<EOF
[Unit]
Description=MinIO Object Storage
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server \$MINIO_OPTS \$MINIO_VOLUMES
Restart=always
RestartSec=5
LimitNOFILE=65536
StandardOutput=append:/var/log/minio/minio.log
StandardError=append:/var/log/minio/minio.log
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable minio
echo "✅ systemd 服务创建完成"
}
# ----- 5. 启动 MinIO 服务 -----
start_minio() {
echo "🚀 启动 MinIO 服务..."
if [ "$OS" = "linux" ]; then
sudo systemctl start minio
sleep 3
if systemctl is-active --quiet minio; then
echo "✅ MinIO 服务已启动"
echo "📊 管理控制台: http://localhost:${MINIO_CONSOLE_PORT}"
echo "📦 API 端点: http://localhost:${MINIO_PORT}"
else
echo "❌ 服务启动失败,查看日志: sudo journalctl -u minio -f"
exit 1
fi
elif [ "$OS" = "darwin" ]; then
# macOS 后台运行
export MINIO_ROOT_USER MINIO_ROOT_PASSWORD
nohup minio server "$MINIO_VOLUME" \
--address ":$MINIO_PORT" \
--console-address ":$MINIO_CONSOLE_PORT" \
> /var/log/minio/minio.log 2>&1 &
echo $! > /tmp/minio.pid
sleep 2
echo "✅ MinIO 已在后台启动 (PID: $(cat /tmp/minio.pid))"
fi
}
# ----- 6. 创建访问密钥和存储桶 -----
configure_minio_client() {
echo "🔑 配置 MinIO 客户端..."
# 安装 mc 客户端
MC_URL="https://dl.min.io/client/mc/release/${OS}-${ARCH}/mc"
wget -q "$MC_URL" -O /tmp/mc || curl -sL "$MC_URL" -o /tmp/mc
sudo mv /tmp/mc /usr/local/bin/mc
sudo chmod +x /usr/local/bin/mc
# 配置别名
mc alias set local http://localhost:${MINIO_PORT} \
${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} \
--api s3v4
# 创建存储桶
BUCKET_NAME="my-bucket"
if ! mc ls local/${BUCKET_NAME} &>/dev/null; then
mc mb local/${BUCKET_NAME}
echo "✅ 存储桶 '${BUCKET_NAME}' 创建成功"
else
echo "ℹ️ 存储桶 '${BUCKET_NAME}' 已存在"
fi
# 设置存储桶为公共只读(可选)
# mc anonymous set download local/${BUCKET_NAME}
# 生成访问密钥(可选)
ACCESS_KEY=$(mc admin user svcacct add local ${MINIO_ROOT_USER} --access-key "myaccesskey" --secret-key "mysecretkey" 2>/dev/null || echo "已存在")
echo "🔑 服务账户密钥已配置"
}
# ----- 7. 验证配置 -----
verify_setup() {
echo "🧪 验证 MinIO 配置..."
# 测试健康检查
HEALTH=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:${MINIO_PORT}/minio/health/live)
if [ "$HEALTH" = "200" ]; then
echo "✅ 健康检查通过"
else
echo "❌ 健康检查失败"
exit 1
fi
# 显示配置信息
echo ""
echo "========================================"
echo " MinIO 配置完成!"
echo "========================================"
echo "管理控制台: http://localhost:${MINIO_CONSOLE_PORT}"
echo "API 端点: http://localhost:${MINIO_PORT}"
echo "用户名: ${MINIO_ROOT_USER}"
echo "密码: ${MINIO_ROOT_PASSWORD}"
echo "存储桶: my-bucket"
echo "数据目录: ${MINIO_VOLUME}"
echo ""
echo "常用命令:"
echo " sudo systemctl status minio # 查看状态"
echo " sudo systemctl restart minio # 重启服务"
echo " mc ls local/ # 列出存储桶"
echo "========================================"
}
# ----- 主流程 -----
main() {
echo "========================================"
echo " MinIO 自动配置脚本 v1.0"
echo "========================================"
# 检查是否为 root 或 sudo 权限
if [ "$EUID" -ne 0 ] && [ "$OS" = "linux" ]; then
echo "⚠️ 请以 root 用户或使用 sudo 运行此脚本"
exit 1
fi
install_minio
setup_directories
configure_env
if [ "$OS" = "linux" ]; then
create_systemd_service
fi
start_minio
configure_minio_client
verify_setup
}
main
使用方法
下载脚本
wget https://your-server/configure-minio.sh chmod +x configure-minio.sh
运行脚本(需要root权限)
sudo ./configure-minio.sh
自定义配置
编辑脚本开头的配置参数:
MINIO_ROOT_USER="your-admin" # 管理员用户名 MINIO_ROOT_PASSWORD="your-pass" # 管理员密码(至少8位) MINIO_VOLUME="/data/minio" # 数据存储目录 MINIO_PORT=9000 # API端口 MINIO_CONSOLE_PORT=9001 # Web管理端口
使用环境变量覆盖
export MINIO_ROOT_PASSWORD="new-password" sudo ./configure-minio.sh
脚本功能说明
| 功能 | 说明 |
|---|---|
| ✅ 自动检测架构 | 支持 x86_64/arm64/arm |
| ✅ 自动安装 | 下载最新或指定版本 |
| ✅ 创建用户 | 创建专用运行用户 |
| ✅ 配置服务 | systemd守护进程 |
| ✅ 自动启动 | 开机自启 |
| ✅ 创建存储桶 | 自动创建示例存储桶 |
| ✅ 配置客户端 | 安装并配置mc命令行工具 |
| ✅ 健康检查 | 验证服务正常运行 |
验证安装
# 查看服务状态 sudo systemctl status minio # 查看日志 sudo journalctl -u minio -f # 使用mc客户端 mc ls local/ mc cp test.txt local/my-bucket/
这个脚本提供了完整的MinIO自动化部署方案,适合开发环境和生产环境快速部署。