Fork me on Gitee

minio配置自启动(windows),环境配置

需要获取完整包下载地址:

链接: https://pan.baidu.com/s/1heVB_JVxgChR4GcL1_iklw?pwd=tyiv 提取码: tyiv

通过 PowerShell 启动脚本读取 minio.env,再用 NSSM 注册 Windows 服务。

最终目录

D:\minio\
├── bin\
│   ├── minio.exe
│   ├── mc.exe
│   └── nssm.exe
├── certs\
│   ├── public.crt
│   └── private.key
├── config\
│   ├── minio.env
├── data\
├── license\
│   └── minio.license
└── logs\
└── start-minio.ps1
  • 本说明以D盘为例子,需要更换个位置的自行更改。
  • 如果使用社区版且不需要许可证,可以不放 minio.license。
  • minio\bin\mc.exe 可以不需要,这个是客户端工具。

创建 minio.env

创建:

D:\minio\config\minio.env

内容如下:

MINIO_ROOT_USER=minio-root-admin
MINIO_ROOT_PASSWORD=替换成你的32位随机密码

MINIO_VOLUMES=D:\minio\data
MINIO_ADDRESS=:9000
MINIO_CONSOLE_ADDRESS=:9001
MINIO_CERTS_DIR=D:\minio\certs

MINIO_SERVER_URL=https://s3.example.com
MINIO_BROWSER_REDIRECT_URL=https://s3-console.example.com

MINIO_LICENSE=D:\minio\license\minio.license

注意:

  • 等号左右不要留空格。
  • 不要给值加反引号。
  • 如果没有许可证要求,删除最后一行。
  • 域名替换成你的实际域名。
  • certs证书换成自己的证书。

创建启动脚本

创建:

D:\minio\start-minio.ps1

写入:

$ErrorActionPreference = 'Stop'

$MinioExe = 'D:\minio\bin\minio.exe'
$EnvFile = 'D:\minio\config\minio.env'

if (-not (Test-Path $MinioExe)) {
    throw "找不到 MinIO 程序:$MinioExe"
}

if (-not (Test-Path $EnvFile)) {
    throw "找不到配置文件:$EnvFile"
}

# 读取 minio.env,将变量加载到当前进程
Get-Content $EnvFile -Encoding UTF8 |
    ForEach-Object {
        $line = $_.Trim()

        # 忽略空行和注释
        if (-not $line -or $line.StartsWith('#')) {
            return
        }

        if ($line -notmatch '=') {
            throw "无效的配置行:$line"
        }

        $name, $value = $line -split '=', 2
        $name = $name.Trim()
        $value = $value.Trim()

        [Environment]::SetEnvironmentVariable(
            $name,
            $value,
            [EnvironmentVariableTarget]::Process
        )
    }

if (-not $env:MINIO_ROOT_USER) {
    throw '未配置 MINIO_ROOT_USER'
}

if (-not $env:MINIO_ROOT_PASSWORD) {
    throw '未配置 MINIO_ROOT_PASSWORD'
}

if (-not $env:MINIO_VOLUMES) {
    throw '未配置 MINIO_VOLUMES'
}

$Arguments = @(
    'server'
    $env:MINIO_VOLUMES
    '--address'
    $env:MINIO_ADDRESS
    '--console-address'
    $env:MINIO_CONSOLE_ADDRESS
)

if ($env:MINIO_CERTS_DIR) {
    $Arguments += @(
        '--certs-dir'
        $env:MINIO_CERTS_DIR
    )
}

# 仅 AIStor 等需要许可证的版本使用
if ($env:MINIO_LICENSE) {
    if (-not (Test-Path $env:MINIO_LICENSE)) {
        throw "找不到许可证:$($env:MINIO_LICENSE)"
    }

    $Arguments += @(
        '--license'
        $env:MINIO_LICENSE
    )
}

& $MinioExe @Arguments
exit $LASTEXITCODE

如果你的 MinIO 版本不支持 --license 参数,删除 minio.env 中的:

MINIO_LICENSE=D:\minio\license\minio.license

脚本就不会传递许可证参数。

手动测试

以管理员身份打开 PowerShell:

powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File 'D:\minio\start-minio.ps1'

成功后通常可以访问:

S3 API:https://服务器地址:9000
管理控制台:https://服务器地址:9001

按 Ctrl+C 停止测试。

如果启动失败,先直接检查版本及参数:

D:\minio\bin\minio.exe --version
D:\minio\bin\minio.exe server --help

注册 Windows 服务

将 NSSM 的 nssm.exe 放到:

D:\minio\bin\nssm.exe

然后用管理员 PowerShell 执行:

$Nssm = 'D:\minio\bin\nssm.exe'
$PowerShell = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'

& $Nssm install MinIO `
  $PowerShell `
  '-NoProfile -NonInteractive -ExecutionPolicy Bypass -File "D:\minio\start-minio.ps1"'

设置工作目录:

& $Nssm set MinIO AppDirectory 'D:\minio'

设置标准输出和错误日志:

& $Nssm set MinIO AppStdout 'D:\minio\logs\minio-stdout.log'
& $Nssm set MinIO AppStderr 'D:\minio\logs\minio-stderr.log'

开启日志轮转,单个日志最大约 100 MB:

& $Nssm set MinIO AppRotateFiles 1
& $Nssm set MinIO AppRotateOnline 1
& $Nssm set MinIO AppRotateBytes 104857600

设置服务自动启动及异常重启:

& $Nssm set MinIO Start SERVICE_AUTO_START
& $Nssm set MinIO AppExit Default Restart
& $Nssm set MinIO AppRestartDelay 5000

启动服务:

Start-Service MinIO

验证服务

查看状态:

Get-Service MinIO

正常结果应为:

Status  Name   DisplayName
------  ----   -----------
Running MinIO  MinIO

查看监听端口:

Get-NetTCPConnection -State Listen |
    Where-Object LocalPort -in 9000, 9001

测试健康检查:

Invoke-WebRequest `
  'https://127.0.0.1:9000/minio/health/live' `
  -SkipCertificateCheck

如果当前 Windows PowerShell 不支持 -SkipCertificateCheck,可以使用:

curl.exe -k https://127.0.0.1:9000/minio/health/live

服务管理命令

Start-Service MinIO
Stop-Service MinIO
Restart-Service MinIO
Get-Service MinIO

修改 minio.env 后重启即可:

Restart-Service MinIO

查看日志:

Get-Content 'D:\minio\logs\minio-stdout.log' -Tail 100
Get-Content 'D:\minio\logs\minio-stderr.log' -Tail 100

实时查看:

Get-Content 'D:\minio\logs\minio-stdout.log' -Tail 50 -Wait

文件权限

minio.env 包含管理员密码,建议限制访问:

icacls 'D:\minio\config\minio.env' /inheritance:r
icacls 'D:\minio\config\minio.env' /grant:r `
  'Administrators:F' `
  'SYSTEM:F'

保护私钥:

icacls 'D:\minio\certs\private.key' /inheritance:r
icacls 'D:\minio\certs\private.key' /grant:r `
  'Administrators:F' `
  'SYSTEM:F'

如果以后将服务改为专用账户运行,还需要给该账户授予:

  • D:\minio\bin:读取和执行
  • D:\minio\config:读取
  • D:\minio\certs:读取
  • D:\minio\data:修改
  • D:\minio\logs:修改

删除服务

如果需要重新注册:

Stop-Service MinIO -ErrorAction SilentlyContinue
D:\minio\bin\nssm.exe remove MinIO confirm

这样配置后,MinIO 会读取 D:\minio\config\minio.env 启动,并随 Windows 开机自动启动,异常退出后约 5 秒自动重启。

posted @ 2026-10-06 10:19  JoePotter  阅读(46)  评论(0)    收藏  举报
``