如何在 Ubuntu 20.04 上以独立模式设置 MinIO 对象存储服务器

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站

如何在 Ubuntu 20.04 上以独立模式设置 MinIO 对象存储服务器

介绍

存储非结构化对象数据 blob 并使其可通过 HTTP API(称为对象存储)进行访问的能力是现代技术领域不可或缺的一部分,尤其是基于云的备份解决方案和高可用性内容交付网络 (CDN)

MinIO是一款与Amazon S3云存储服务兼容的开源对象存储服务器。配置为与 Amazon S3 交互的应用程序也可以配置为与 MinIO 交互,这意味着您可以使用 MinIO 作为 S3 的可行替代方案,以更好地控制对象存储服务器。该服务存储非结构化数据,例如照片、视频、日志文件、备份和容器/虚拟机映像,并可以提供单个对象存储服务器,该服务器可以池化分布在许多服务器上的多个驱动器。

MinIO用Go编写,带有命令行客户端和图形界面(MinIO 控制台),同时支持高级消息队列协议 (AMQP)ElasticsearchRedisNATSPostgreSQL目标的简单队列服务。出于所有这些原因,设置 MinIO 对象存储服务器可以为您的项目添加广泛的灵活性和实用性。

MinIO 可以以独立模式安装在单个服务器上,也可以以分布式模式安装在两台或多台服务器(总共至少有四个驱动器或存储卷)上。MinIO 的独立部署缺乏分布式部署默认的一些高级功能,例如版本控制、扩展、冗余和可用性。独立部署可用于评估和小型开发目的,而强烈建议使用分布式部署以满足生产或重大开发需求。

在本教程中,将通过以下方式设置 MinIO 的独立部署:

  • 在运行 Ubuntu 20.04 的服务器上安装 MinIO 服务器。
  • 个人计算机上安装 MinIO 客户端并将其配置为与 MinIO 服务器通信。
  • 设置数字证书以保护服务器和客户端之间的通信(包括通过 MinIO 控制台)。

先决条件

需要:

  • 一台 Ubuntu 20.04 服务器,包括 sudo 非 root 用户和防火墙。

或者,要通过域名访问 MinIO 控制台而不是通过服务器的 IP 地址访问它,或者除了通过服务器的 IP 地址访问它之外,还需要:

  • 已注册的域名。

第 1 步 — 下载并安装 MinIO 服务器

MinIO 服务器可以从二进制文件.deb或包安装。在此步骤中,将使用.deb包安装它。

首先,登录服务器:

ssh sammy@your-server-ip

更新包数据库:

sudo apt update

然后,更新系统:

sudo apt upgrade

使用 确认安装y

在升级过程中,可能会在终端中收到一个屏幕(参见下图),要求输入有关 OpenSSH 服务器配置文件的信息。由于不希望覆盖对配置文件所做的更改,因此请按Enter接受以红色突出显示的默认选项(“保留当前安装的本地版本”)。

Ubuntu 20.04 软件包升级提示

接下来,从MinIO 下载页面下载 MinIO 服务器的最新软件包:

wget https://dl.min.io/server/minio/release/linux-amd64/minio_20220523184511.0.0_amd64.deb
sudo dpkg -i minio_20220523184511.0.0_amd64.deb

-i选项将安装该软件包。

该命令设置了一个minio命令和一个systemd启动脚本,两者都可用于启动 MinIO 服务器。

在这里,更新了软件包并安装了 MinIO 服务。在下一步中,将创建 MinIO 服务器运行所需的文件系统对象。

步骤 2 — 创建 MinIO 用户、组、数据目录和环境文件

在此步骤中,将设置 MinIO 服务器的要求。如果此步骤中的任务未完成,MinIO 服务器将不会启动。

首先,使用以下命令创建 MinIO 服务器将运行的系统组:

sudo groupadd -r minio-user

-r标志指示命令将该组设为系统组。

然后,创建 MinIO 服务器将运行的用户:

sudo useradd -M -r -g minio-user minio-user

-M标志指示命令不要为用户创建主目录。该-r标志创建一个系统用户。该-g标志将用户分配到其主要组;在这种情况下,该组是minio-user之前创建的组。

接下来,使用以下命令创建 MinIO 将在其中存储其所有文件的数据目录:

sudo mkdir /mnt/data

然后,将数据目录的所有权授予 MinIO 用户和组:

sudo chown minio-user:minio-user /mnt/data

最后,使用以下命令创建并打开MinIO的环境文件:

sudo nano /etc/default/minio

该文件将保存服务器和控制台所需的变量。

将以下代码添加到文件中,使用服务器的非 root 用户:

/etc/default/minio

MINIO_VOLUMES="/mnt/data"

MINIO_OPTS="--certs-dir /home/sammy/.minio/certs --console-address :9001"

MINIO_ROOT_USER=minioadmin

MINIO_ROOT_PASSWORD=minioadmin

MINIO_VOLUMES:变量定义了MinIO的数据目录。

MINIO_OPTS:变量定义了数字证书的目录、监听地址和端口号(所有网络接口和端口9001)。有些目录尚不存在,但将在步骤 4 中创建。

MINIO_ROOT_USER:登录用户。

MINIO_ROOT_PASSWORD:密码。两者当前均设置为minioadmin

保存并关闭文件。

在此步骤中,设置了 MinIO 用户和其他要求。接下来,配置防火墙以允许 MinIO 流量通过。

步骤 3 — 设置防火墙以允许 MinIO 流量

在此步骤中,将配置防火墙以允许流量进入访问 MinIO 服务器和 MinIO 控制台的端口。以下内容与 MinIO 相关:

  • 9000是 MinIO 服务器侦听的默认端口。
  • 9001是访问 MinIO 控制台的推荐端口。

使用以下命令允许流量通过防火墙到达两个端口:

sudo ufw allow 9000:9001/tcp

将看到以下输出:

OutputRule added
Rule added (v6)

现在端口已准备就绪,下来可以生成自签名证书以启用对 MinIO 服务器的安全访问。

步骤 4 — 使用自签名证书保护对 MinIO 服务器的访问

在此步骤中,将使用MinIO 开发人员的 Go 应用程序来生成自签名证书。(注意版本,这里用的是1.2.0)

使用以下命令下载最新版本:

wget https://github.com/minio/certgen/releases/download/v1.2.0/certgen_1.2.0_linux_amd64.deb

此命令将在工作目录中放置一个名为certgen_1.2.0_linux_amd64.deb的文件。使用以下命令安装它:

sudo dpkg -i certgen_1.2.0_linux_amd64.deb

如果要将域名指向服务器并希望通过该域名和 IP 地址引用 MinIO 服务器,请使用以下命令为 MinIO 服务器生成证书:

sudo certgen -host example.com,your-server-ip

如果只想通过服务器的 IP 地址访问 MinIO 服务器,请使用以下命令为其生成证书:

sudo certgen -host your-server-ip

如果生成成功,输出应如下所示:

OutputCreated a new certificate 'public.crt', 'private.key' valid for the following names
 - "example.com"
 - "your-server-ip"

如果没有使用域名,您的输出将仅列出服务器的 IP。

文件public.crtprivate.key应位于系统工作目录中。这些文件需要移动到上面配置MINIO_OPTS的目录中。由于该目录尚不存在,请使用以下命令创建它:

sudo mkdir -p /home/sammy/.minio/certs

-p选项创建不存在的父目录。

使用此命令移动文件:

sudo mv private.key public.crt /home/sammy/.minio/certs

最后,将这两个文件的所有权授予 MinIO 用户和组:

sudo chown minio-user:minio-user /home/sammy/.minio/certs/private.key
sudo chown minio-user:minio-user /home/sammy/.minio/certs/public.crt

在此步骤中为服务器和/或域名生成了自签名证书。接下来,启动 MinIO 服务器。

第 5 步 — 启动 MinIO 服务器

在此步骤中,将启动 MinIO 服务器及其systemd服务。

MinIO 服务器可以使用minio命令或调用其systemd启动脚本来启动。但是,当使用该命令启动 MinIO 服务器时minio,它将无法重新启动。另外,使用命令启动 MinIO 服务器minio会自动在 .minio下创建文件夹/root,这不适用于 systemd。因此建议通过 systemd启动 MinIO 服务器。

使用以下命令启动 MinIO 服务器:

sudo systemctl start minio

检查状态:

sudo systemctl status minio

输出应如下所示:

Outputminio.service - MinIO
     Loaded: loaded (/etc/systemd/system/minio.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-05-23 02:55:03 UTC; 2s ago
       Docs: https://docs.min.io
    Process: 21978 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default>
   Main PID: 21989 (minio)
      Tasks: 7
     Memory: 49.5M
     CGroup: /system.slice/minio.service
             └─21989 /usr/local/bin/minio server --certs-dir /home/finid/.minio/certs --console-address :9001 /mnt/data

May 23 02:55:03 minio-buntu systemd[1]: Starting MinIO...
May 23 02:55:03 minio-buntu systemd[1]: Started MinIO.
May 23 02:55:03 minio-buntu minio[21989]: WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you chang>
May 23 02:55:03 minio-buntu minio[21989]: API: https://161.35.115.223:9000  https://10.10.0.6:9000  https://10.116.0.3:9000  https:/>
May 23 02:55:03 minio-buntu minio[21989]: Console: https://161.35.115.223:9001 https://10.10.0.6:9001 https://10.116.0.3:9001 https:>
May 23 02:55:03 minio-buntu minio[21989]: Documentation: https://docs.min.io
May 23 02:55:03 minio-buntu minio[21989]: Finished loading IAM sub-system (took 0.0s of 0.0s to load data).

如果上面的输出参考中的 API 和控制台https,那么大功告成。

第 6 步 — 通过 MinIO 控制台安全连接到 MinIO 服务器

MinIO 控制台是用于执行访问日志监控和服务器配置等管理任务的图形界面。在此步骤中,将通过此控制台连接到 MinIO 服务器。

浏览器输入https://your-server-ip:9001.

**注意:**由于不涉及网络服务器,因此http://your-server-ip:9001不会重定向到https://your-server-ip:9001. 始终用于https://your-server-ip:9001访问您的 MinIO 控制台。

现在将加载 MinIO 控制台登录屏幕:

MinIO 控制台的登录屏幕

使用在步骤 2 中创建的 MinIO 环境文件中配置的凭据登录。

登录成功后,主界面将如下所示:

MinIO Console主界面

步骤 7 — 在本地计算机上安装和使用 MinIO 客户端

MinIO 客户端是安装在本地计算机上的 MinIO 组件,用于管理 MinIO 服务器。此步骤中的所有命令都将在本地计算机的命令行上完成。与 MinIO 服务器一样,客户端可以从二进制文件或包安装。

在本地计算机上的新终端会话中,从MinIO 下载页面下载最新的 MinIO 客户端包:

wget https://dl.min.io/client/mc/release/linux-amd64/mcli_20220509040826.0.0_amd64.deb

wget在工作目录中放置一个名为的文件mcli_20220509040826.0.0_amd64.deb。使用以下命令安装它:

sudo dpkg -i mcli_20220509040826.0.0_amd64.deb 

此命令使 MinIO 客户端在个人计算机上可用,然后可以使用该mcli命令调用它。要初始化客户端并为 shell 启用自动完成功能(这将有助于键入客户端命令),请发出以下命令:

mcli --autocompletion

将得到如下输出:

Outputmcli: Configuration written to `/home/sammy/.mcli/config.json`. Please update your access credentials.
mcli: Successfully created `/home/sammy/.mcli/share`.
mcli: Initialized share uploads `/home/sammy/.mcli/share/uploads.json` file.
mcli: Initialized share downloads `/home/sammy/.mcli/share/downloads.json` file.
mcli: Your shell is set to 'bash', by env var 'SHELL'.
mcli: enabled autocompletion in your 'bash' rc file. Please restart your shell.

此输出告诉隐藏配置文件夹及其下的其他文件夹和配置文件的位置。

要在当前 shell 中启用自动完成功能而不实际关闭并重新启动它,请发出以下命令:

source .profile

开箱即用的配置文件包含可以使用 MinIO 客户端进行管理的 MinIO 服务器的访问凭据。可以在终端编辑器中编辑该文件,也可以使用mcli添加条目。

要使用 mcli为 MinIO 服务器在配置文件中添加条目,请使用以下命令以及在步骤 2 中为服务器设置的凭据:

mcli --insecure alias set myminio/ https://your-server-ip:9000 minioadmin minioadmin

alias set命令后面的名称可以设置为任何内容。这里它被设置为myminio/

--insecure标志是必要的,因为我们使用的是自签名证书。如果没有它,命令将失败,因为客户端将尝试验证证书是否来自受信任的证书颁发机构。

**提示:**当使用 MinIO 客户端连接到 MinIO 服务器时,请始终调用mcli带有--insecure标志的命令。这并不意味着连接不安全。这只是意味着客户端不会尝试验证证书的真实性。如果没有该标志,该命令将失败,但仅在使用自签名证书时才使用它。

使用以下命令查看~/.mcli/config.json文件内部:

sudo nano ~/.mcli/config.json

将看到myminio刚刚添加的主机:

〜/.mcli/config.json

{
  "version": "10",
  "aliases": {
    "gcs": {
      "url": "https://storage.googleapis.com",
      "accessKey": "YOUR-ACCESS-KEY-HERE",
      "secretKey": "YOUR-SECRET-KEY-HERE",
      "api": "S3v2",
      "path": "dns"
    },
    "local": {
      "url": "http://localhost:9000",
      "accessKey": "",
      "secretKey": "",
      "api": "S3v4",
      "path": "auto"
    },
    "myminio": {
      "url": "https://your_server_ip:9000",
      "accessKey": "minioadmin",
      "secretKey": "minioadmin",
      "api": "S3v4",
      "path": "auto"
    },
    "play": {
      "url": "https://play.min.io",
      "accessKey": "ACCESS-KEY",
      "secretKey": "SECRET-KEY",
      "api": "S3v4",
      "path": "auto"
    },
    "s3": {
      "url": "https://s3.amazonaws.com",
      "accessKey": "YOUR-ACCESS-KEY-HERE",
      "secretKey": "YOUR-SECRET-KEY-HERE",
      "api": "S3v4",
      "path": "dns"
    }
  }

现在已准备好探索客户端附带的命令。使用-h标志运行它以打印出帮助页面:

mcli -h 

输出应包括以下内容:

OutputCOMMANDS:
  alias      manage server credentials in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mv         move objects
  rm         remove object(s)
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
...
...

GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/home/finid/.mcli")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version
...

有关如何使用任何命令的提示,请使用选项调用它-h。例如:

mcli alias -h

要收集有关 MinIO 服务器的信息,请输入:

mcli --insecure admin info myminio

输出将与此类似:

Output●  your-server-ip:9000
   Uptime: 8 hours 
   Version: 2022-05-19T18:20:59Z

当 MinIO 服务器运行时,可以使用以下命令重新启动它:

mcli --insecure admin service restart myminio

无法从客户端启动已停止的 MinIO 服务器。如果 MinIO 服务器已停止,必须登录服务器并systemctl使用步骤 5 中的命令启动它。可以使用以下命令停止服务器:

mcli --insecure admin service stop myminio