飞牛NAS安装 MinIO 对象存储服务完整教程(Docker部署)

在私有云与自建存储场景中,MinIO 是一款高性能、兼容 S3 协议的对象存储服务,非常适合搭建私有图床、备份系统、静态资源存储或为应用提供对象存储接口。

在飞牛NAS(fnOS)环境中,我们可以通过 Docker 方式快速部署 MinIO,实现类似阿里云 OSS、腾讯 COS 或 AWS S3 的私有存储能力。

本教程将详细介绍:

  • 飞牛NAS部署 MinIO 的准备工作
  • Docker 容器安装方法
  • 端口映射与访问方式
  • 控制台登录配置
  • 基础存储桶创建

适合新手与有一定基础的用户参考。

登录飞牛nas

新增一个项目

docker-compose.yml内容为

services:
  minio:
    image: minio/minio:latest
    container_name: minio
    restart: always
    ports:
      - "9000:9000"       # S3 API 端口
      - "9001:9001"       # 管理后台端口
    environment:
      MINIO_ROOT_USER: admin  # 这里填你的账户
      MINIO_ROOT_PASSWORD: admin  # 这里填你的新密码
    volumes:
      - ./data:/data
    command: server /data --console-address ":9001"

然后使用ssh登录nas

路径可以随意也可以指定

这里我使用/fs/1000/ftp/SSD/minio/路径

cd /fs/1000/ftp/SSD/minio/
nano minlo.sh

粘贴下面代码

#!/bin/bash
set -e

MC_ALIAS="myminio"
MC_CONNECTED=0

# =======================
# 安装 mc
# =======================
install_mc() {
    echo "==> 安装 MinIO 客户端 mc..."
    if ! command -v mc &>/dev/null; then
        wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc
        chmod +x /usr/local/bin/mc
        echo "mc 安装完成:$(mc --version)"
    else
        echo "mc 已安装:$(mc --version)"
    fi
}
# =======================
# 连接 MinIO(仅 Root)
# =======================
connect_s3() {
    read -p "请输入 MinIO Server Endpoint (默认 http://127.0.0.1:9000): " MINIO_ENDPOINT
    MINIO_ENDPOINT=${MINIO_ENDPOINT:-http://127.0.0.1:9000}

    read -p "请输入 Root 用户名: " MINIO_ROOT_USER
    read -s -p "请输入 Root 密码: " MINIO_ROOT_PASSWORD
    echo

    mc alias set $MC_ALIAS $MINIO_ENDPOINT $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
    echo "✅ 已成功连接 MinIO:$MINIO_ENDPOINT"
}

# =======================
# 列出 S3 用户
# =======================
list_users() {
    echo "==> 当前已有 S3 用户列表:"
    mc admin user list $MC_ALIAS | awk 'NR==1 || $1=="enabled" || $1=="disabled"'
}

# =======================
# 添加 S3 用户
# =======================
add_s3_user() {
    list_users
    read -p "请输入新 S3 用户名: " NEW_USER

    NEW_PASS=$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 20)
    mc admin user add $MC_ALIAS $NEW_USER $NEW_PASS

    echo "✅ 用户创建成功"
    echo "用户名: $NEW_USER"
    echo "密码:   $NEW_PASS"
}

# =======================
# 创建 API
# =======================
create_api() {
    list_users
    read -p "请输入 S3 用户名: " USERNAME

    if ! mc admin user list $MC_ALIAS | awk '{print $2}' | grep -qw "$USERNAME"; then
        echo "❌ 用户不存在"
        return
    fi

    AK=$(tr -dc 'A-Z0-9' </dev/urandom | head -c 20)
    SK=$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 40)

    mc admin user svcacct add $MC_ALIAS $USERNAME \
        --access-key $AK \
        --secret-key $SK

    echo "✅ API 创建完成"
    echo "Access Key: $AK"
    echo "Secret Key: $SK"
}

# =======================
# 赋予权限
# =======================
attach_permission() {
    list_users
    read -p "请输入要赋权的 S3 用户名: " USERNAME

    mc admin policy attach $MC_ALIAS readwrite --user $USERNAME
    echo "✅ 已赋予 readwrite 权限"
}

# =======================
# 删除 S3 用户
# =======================
delete_user() {
    list_users
    read -p "请输入要删除的 S3 用户名: " USERNAME

    if ! mc admin user list $MC_ALIAS | awk '{print $2}' | grep -qw "$USERNAME"; then
        echo "❌ 用户不存在"
        return
    fi

    mc admin user remove $MC_ALIAS $USERNAME
    echo "✅ 用户 $USERNAME 已删除"
}

# =======================
# 卸载 mc
# =======================
uninstall_mc() {
    if command -v mc &>/dev/null; then
        rm -f /usr/local/bin/mc
        echo "✅ mc 可执行文件已删除"
    else
        echo "⚠️ mc 未安装,无需删除可执行文件"
    fi

    if [ -d "$HOME/.mc" ]; then
        rm -rf "$HOME/.mc"
        echo "✅ mc 配置文件已删除:$HOME/.mc"
    else
        echo "⚠️ 未找到 mc 配置文件"
    fi
}


# =======================
# 主菜单
# =======================
while true; do
    echo "=============================="
    echo " MinIO S3 用户 / API 管理工具 "
    echo "=============================="
    echo "1) 安装 mc"
    echo "2) 连接 MinIO(Root)"
    echo "3) 添加 S3 用户"
    echo "4) 创建 API"
    echo "5) 赋予访问权限"
    echo "6) 删除 S3 用户"
    echo "7) 卸载 mc"
    echo "0) 退出"
    echo "=============================="

    read -p "请输入选项 [0-7]: " choice
    case $choice in
        1) install_mc ;;
        2) connect_s3 ;;
        3) add_s3_user ;;
        4) create_api ;;
        5) attach_permission ;;
        6) delete_user ;;
        7) uninstall_mc ;;
        0) echo "退出脚本"; exit 0 ;;
        *) echo "无效选项" ;;
    esac
done

赋予执行权限

使用以下命令来给脚本文件赋予可执行权限:

chmod +x minlo.sh

运行脚本

现在,你可以运行脚本了:

./minlo.sh

使用1安装

2号进行链接

若果没有改映射端口这样就成功了如果改了就修改对应的端口
请输入 MinIO Server Endpoint (默认 http://127.0.0.1:9000):

然后就可以通过地址访问了

http://192.168.50.104:9001

如果需要外网访问只需反代http://192.168.50.104:9001

这里就不演示了

应用场景

MinIO 可以用于:

  • WordPress 媒体存储
  • 图床系统
  • 备份存储
  • 日志存储
  • 程序对象存储接口

兼容 AWS S3 SDK,几乎所有支持 S3 的程序都可接入。