百度

MinIO启用HTTPS配置方法

第 1 步:准备工作

  1. 假设
    • MinIO 已安装,例如在 /usr/local/bin/minio
    • 你已有一个指向本机的域名(例如 minio.example.com),用于申请 SSL 证书
    • 系统防火墙已开放端口 9000 (API) 和 9001 (控制台)
  2. 停止正在运行的 MinIO 服务
     
    # 如果通过 systemd 运行
    systemctl stop minio
    # 如果通过 nohup 或 screen 在终端运行,请先结束相关进程
    pkill -f minio
     
     

第 2 步:安装 Certbot 获取 Let's Encrypt SSL 证书

 
# 1. 安装 snapd
dnf install -y snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
# 使 snap 命令生效
source /etc/profile.d/snapd.sh

# 2. 通过 snap 安装 certbot
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

# 3. 申请 SSL 证书
# 确保 80 和 443 端口没有被占用(临时停止 nginx/apache)
systemctl stop nginx httpd 2>/dev/null || true

certbot certonly --standalone -d minio.example.com --agree-tos --email your-email@example.com --non-interactive
# 将 minio.example.com 和 your-email@example.com 替换为你的域名和邮箱
# 证书将生成在: /etc/letsencrypt/live/minio.example.com/
 
 

第 3 步:准备 MinIO 证书目录和文件

MinIO 二进制程序会在 ~/.minio/certs目录(用户家目录下)或通过 --certs-dir参数指定的目录查找证书。
 
# 1. 创建 MinIO 运行用户的证书目录
# 假设你运行 MinIO 的用户名为 minio-user(或 root,按你的实际情况调整)
CERT_DIR="/home/minio-user/.minio/certs"
# 如果以 root 运行,则目录为:
# CERT_DIR="/root/.minio/certs"

mkdir -p $CERT_DIR

# 2. 复制 Let's Encrypt 证书到该目录
DOMAIN="minio.example.com"
cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem $CERT_DIR/public.crt
cp /etc/letsencrypt/live/$DOMAIN/privkey.pem $CERT_DIR/private.key

# 3. 设置正确的文件所有权和权限
# 假设 minio-user 是运行 MinIO 的用户
chown -R minio-user:minio-user $CERT_DIR
chmod 644 $CERT_DIR/public.crt
chmod 600 $CERT_DIR/private.key
# 如果以 root 运行,则:
# chmod 644 $CERT_DIR/public.crt
# chmod 600 $CERT_DIR/private.key
 
 

第 4 步:配置 MinIO 服务 (使用 systemd) 以启用 HTTPS

  1. 创建或编辑 MinIO 环境配置文件(推荐方式,便于管理敏感信息)
     
    vim /etc/default/minio
     
     
    内容如下(请根据你的实际路径和设置修改):
     
    # MinIO root 用户和密码
    MINIO_ROOT_USER="YourStrongAccessKey"
    MINIO_ROOT_PASSWORD="YourVeryStrongSecretKey"
    
    # MinIO 数据存储目录(用逗号分隔多个路径)
    MINIO_VOLUMES="/mnt/data{1...4}"
    
    # MinIO 服务器地址 - 使用域名和 HTTPS
    MINIO_OPTS="--address :9000 --console-address :9001"
    # 如果你希望监听所有 IP
    # MINIO_OPTS="--address 0.0.0.0:9000 --console-address 0.0.0.0:9001"
    
    # 可选:如果你将证书放在非默认位置,可以用 --certs-dir 指定
    # MINIO_OPTS="$MINIO_OPTS --certs-dir $CERT_DIR"
    
    # 可选:设置服务器区域
    MINIO_REGION="us-east-1"
     
     
    重要MINIO_ROOT_USERMINIO_ROOT_PASSWORD是管理员账号,务必修改为复杂的强密码。
  2. 创建或修改 systemd 服务文件
     
    vim /etc/systemd/system/minio.service
     
     
    内容如下:
     
    [Unit]
    Description=MinIO Object Storage Server
    Documentation=https://min.io/docs/minio/linux/index.html
    After=network-online.target
    Wants=network-online.target
    AssertFileIsExecutable=/usr/local/bin/minio
    
    [Service]
    Type=notify
    WorkingDirectory=/usr/local
    
    # 从环境文件加载配置
    EnvironmentFile=/etc/default/minio
    
    # 以指定用户运行(建议创建专有用户,这里以 minio-user 为例)
    User=minio-user
    Group=minio-user
    
    # 证书目录权限(如果证书在用户家目录下,这步很重要)
    ReadWritePaths=/home/minio-user/.minio/certs
    # 如果以 root 运行,注释掉 User/Group 和 ReadWritePaths 行
    
    # 启动命令
    ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
    ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
    
    # 让 systemd 自动重启服务
    Restart=always
    RestartSec=10
    
    # 指定信号量
    KillSignal=SIGTERM
    TimeoutStopSec=120
    
    # 指定日志
    StandardOutput=journal
    StandardError=journal
    
    # 指定安全选项
    NoNewPrivileges=yes
    LimitNOFILE=65536
    LimitNPROC=4096
    LimitAS=infinity
    LimitFSIZE=infinity
    TasksMax=infinity
    OOMScoreAdjust=-1000
    
    [Install]
    WantedBy=multi-user.target
     
     
  3. 重新加载 systemd 并启动服务
     
    # 重新加载 systemd 配置
    systemctl daemon-reload
    
    # 设置开机自启
    systemctl enable minio
    
    # 启动 MinIO 服务
    systemctl start minio
    
    # 查看服务状态和日志
    systemctl status minio
    journalctl -u minio -f
     
     

第 5 步:验证 HTTPS 是否生效

  1. 查看服务日志,确认证书加载成功:
     
    journalctl -u minio | grep -i certificate
    # 应该能看到类似 "Loaded TLS certificate" 的日志
    journalctl -u minio | grep -i "API"
    # 应该显示 HTTPS 地址,例如:
    # API: https://your-ip:9000  https://127.0.0.1:9000
    # Console: https://your-ip:9001 https://127.0.0.1:9001
     
     
  2. 用浏览器访问控制台
    • 访问 https://minio.example.com:9001
    • 应该看到绿色锁标志,并使用你设置的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD登录。
  3. curl测试 API
     
    curl -v https://minio.example.com:9000/minio/health/live
    # 应返回 HTTP 200 OK
     
     

第 6 步:设置 SSL 证书自动续期

  1. 测试续期命令
     
    certbot renew --dry-run
     
     
  2. 创建续期后的部署钩子脚本
     
    vim /etc/letsencrypt/renewal-hooks/deploy/minio-renew.sh
     
     
    内容如下(根据你的实际用户和路径修改):
     
    #!/bin/bash
    DOMAIN="minio.example.com"
    RUN_USER="minio-user"
    CERT_DIR="/home/$RUN_USER/.minio/certs"
    
    # 复制新证书
    cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem $CERT_DIR/public.crt
    cp /etc/letsencrypt/live/$DOMAIN/privkey.pem $CERT_DIR/private.key
    
    # 设置正确的所有权和权限
    chown $RUN_USER:$RUN_USER $CERT_DIR/public.crt $CERT_DIR/private.key
    chmod 644 $CERT_DIR/public.crt
    chmod 600 $CERT_DIR/private.key
    
    # 重启 MinIO 服务
    systemctl restart minio
    
    # 记录日志
    echo "$(date) - MinIO SSL certificate renewed and service restarted." >> /var/log/minio-cert-renew.log
     
     
    保存并赋予执行权限:
     
    chmod +x /etc/letsencrypt/renewal-hooks/deploy/minio-renew.sh
     
     
  3. 添加到 crontab 自动续期
     
    crontab -e
     
     
    添加以下行(例如每天凌晨 3 点检查续期):
     
    0 3 * * * /usr/bin/certbot renew --quiet --deploy-hook "/etc/letsencrypt/renewal-hooks/deploy/minio-renew.sh"
     
posted @ 2026-04-01 21:18  麦克斯-侯  阅读(14)  评论(0)    收藏  举报
百度