作者选择了 自由和开源基金作为 写给捐款计划的一部分接受捐款。
介绍
通过HTTP APIs存储非结构化对象数据,并使其可访问的能力,称为object storage,是现代技术环境的组成部分,特别是基于云的备份解决方案和高可用性(内容交付网络(CDNs)](https://andsky.com/tech/tutorials/using-a-cdn-to-speed-up-static-content-delivery)。
MinIO是一个与亚马逊S3云存储服务兼容的开源对象存储服务器。配置为与亚马逊S3接口的应用程序还可以配置为与MinIO接口,这意味着您可以使用MinIO作为对S3的可行替代品,以便对您的对象存储服务器进行更大的控制。该服务存储非结构化数据,如照片,视频,日志文件,备份和容器/VM图像,并可提供一个单一的对象存储服务器,可以聚集跨多个服务器的多个驱动器。
MinIO 以 Go 编写,配备命令行客户端和图形界面(MinIO 控制台),同时支持 Advanced Message Queuing Protocol (AMQP), Elasticsearch, Redis, NATS和 PostgreSQL的简单排队服务。
MinIO 可以在 Standalone Mode上安裝在單一伺服器上,或在 Distributed Mode上安裝在兩個或兩個以上的伺服器上,共有至少四個驅動器或儲存量。MinIO 的獨立部署缺乏一些先進的功能,這些功能是分布式部署的默認功能,例如版本化、擴展、浪費性和可用性。
在本教程中,您将通过:
- 在运行 Ubuntu 20.04 的服务器上安装 MinIO 服务器
- 在您的个人计算机上安装 MinIO 客户端并配置它以与 MinIO 服务器进行通信。
前提条件
要完成本教程,您将需要:
- 一个 Ubuntu 20.04 服务器,包括一个 sudo 非 root 用户和一个防火墙. 您可以按照 此 Ubuntu 20.04 初始服务器设置来设置它。
可选地,要通过域名访问 MinIO Console,而不是通过服务器的 IP 地址访问它,您需要:
您可以在 Namecheap购买域名,在 Freenom免费获取域名,或使用您所选择的域名注册器。
- 以下 DNS 记录为您的服务器。 按照 DNS Quickstart获取如何添加域名的详细信息。
- 指向您的服务器的公共 IP 地址的
example.com
记录。 - 指向您的服务器的公共 IP 地址的
www.example.com
记录。
步骤1:下载和安装MinIO服务器
MinIO 服务器可以从二进制文件或.deb 软件包安装,在此步骤中,您将使用.deb 软件包安装它。
首先,您可以登入您的服务器:
1ssh sammy@your-server-ip
更新包数据库:
1sudo apt update
然后更新系统:
1sudo apt upgrade
用y
确认安装。
在升级过程中,您可能会在终端中收到一个屏幕(见下图)请求您提供有关 OpenSSH 服务器的配置文件的信息. 由于您对配置文件所做的更改不宜重写,请按输入
来接受红色突出的默认选项(保持当前安装的本地版本
。
接下来,下载 MinIO 服务器的最新 .deb
包从 MinIO 下载页面:
1wget https://dl.min.io/server/minio/release/linux-amd64/minio_20220523184511.0.0_amd64.deb
將名為「minio_20220523184511.0.0_amd64.deb」的檔案下載到您的工作目錄中。 使用「dpkg」命令來管理「.deb」套件,因此使用以下命令安裝下載的檔案:
1sudo dpkg -i minio_20220523184511.0.0_amd64.deb
-i
选项将安装该包。
该命令设置了一个minio
命令和一个systemd
启动脚本,这两者都可以用来启动MinIO服务器。
在这里,您更新了包并安装了MinIO服务,在下一步,您将创建需要运行MinIO服务器的文件系统对象。
步骤 2 — 创建 MinIO 用户、组、数据目录和环境文件
在此步骤中,您将为 MinIO 服务器设置要求,如果未完成此步骤中的任务,MinIO 服务器将不会启动。
首先,创建一个系统组,MinIO服务器将使用以下命令运行:
1sudo groupadd -r minio-user
-r
旗指示命令将该组变成一个系统组。
然后,创建用户,MinIO服务器将运行为:
1sudo useradd -M -r -g minio-user minio-user
-M
旗指示命令不要为用户创建主目录. -r
旗创建系统用户. -g
旗分配用户到其主要组;在这种情况下,该组是先前创建的小用户
组。
接下来,创建数据目录,MinIO将用以下命令存储所有文件:
1sudo mkdir /mnt/data
然后,将数据目录的所有权交给 MinIO 用户和组:
1sudo chown minio-user:minio-user /mnt/data
最后,使用以下命令创建和打开 MinIO 的环境文件:
1sudo nano /etc/default/minio
此文件将包含服务器和控制台所需的变量。
将下列代码添加到文件中,与您的服务器的非根用户更新 sammy:
1[label /etc/default/minio]
2MINIO_VOLUMES="/mnt/data"
3
4MINIO_OPTS="--certs-dir /home/sammy/.minio/certs --console-address :9001"
5
6MINIO_ROOT_USER=minioadmin
7
8MINIO_ROOT_PASSWORD=minioadmin
MINIO_VOLUMES
变量定义了MinIO的数据目录,而MINIO_OPTS
变量定义了数字证书目录、MinIO Console的收听地址和端口号(所有网络接口和端口9001)。
您可以用MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
变量定义 MinIO Console 的登录用户和密码,目前两者都设置为minioadmin
,但您应该使用安全登录凭证更新用户和密码。
保存并关闭文件。
在此步骤中,您将设置您的 MinIO 用户和其他要求,接下来,您将配置防火墙以允许 MinIO 流量通过。
步骤 3 – 设置防火墙以允许MinIO流量
在此步骤中,您将配置防火墙以允许流量进入访问 MinIO 服务器和 MinIO 控制台的端口。
9000
是 MinIO 服务器听取的默认端口。9001
是访问 MinIO 控制台的推荐端口。
通过防火墙允许流量到两个端口,使用以下命令:
1sudo ufw allow 9000:9001/tcp
您将看到以下结果:
1[secondary_label Output]
2Rule added
3Rule added (v6)
现在端口已经准备好了,您可以生成自签证证书,以便安全访问MinIO服务器。
步骤 4 – 通过自签证证书确保访问 MinIO 服务器
在此步骤中,您将使用certgen
,由MinIO的开发者开发的Go应用程序,生成自签证书。在写作时的最新版本是 版本 1.2.0。
下载最新版本,使用以下命令:
1wget https://github.com/minio/certgen/releases/download/v1.2.0/certgen_1.2.0_linux_amd64.deb
此命令将将名为 certgen_1.2.0_linux_amd64.deb
的文件放入您的工作目录。
1sudo dpkg -i certgen_1.2.0_linux_amd64.deb
certgen
命令现在在系统上可用,而certgen -h
将输出其使用信息。
如果您想将域名指向服务器,并希望将 MinIO 服务器指向该域名和 IP 地址,请使用以下命令生成 MinIO 服务器的证书:
1sudo certgen -host example.com,your-server-ip
如果您只希望通过服务器的 IP 地址访问 MinIO 服务器,请使用以下命令生成该服务器的证书:
1sudo certgen -host your-server-ip
如果生成成功,输出应该是这样的:
1[secondary_label Output]
2Created a new certificate 'public.crt', 'private.key' valid for the following names
3 - "example.com"
4 - "your-server-ip"
如果您不使用域名,您的输出只会列出服务器的 IP。
文件 public.crt
和 private.key
应该在你的工作目录. 这些文件需要移动到 /home/sammy/.minio/certs
目录. 因为那个目录还不存在,用以下命令创建它,用你的服务器的非根用户代替 sammy:
1sudo mkdir -p /home/sammy/.minio/certs
-p
选项创建不存在的母目录。
使用此命令移动文件(根据需要取代 sammy):
1sudo mv private.key public.crt /home/sammy/.minio/certs
最后,将两个文件的所有权交给MinIO用户和组(必要时取代sammy):
1sudo chown minio-user:minio-user /home/sammy/.minio/certs/private.key
2sudo chown minio-user:minio-user /home/sammy/.minio/certs/public.crt
在此步骤中,您为您的服务器和/或域创建了自签证书,接下来,您将启动MinIO服务器。
步骤 5 – 启动MinIO服务器
在此步骤中,您将启动 MinIO 服务器与其systemd
服务。
MinIO 服务器可以用minio
命令启动,或者通过调用它的systemd
启动脚本。但是,当 MinIO 服务器用minio
命令启动时,它不会再重新启动,而且,使用minio
命令启动 MinIO 服务器会自动在/root
下创建.minio
文件夹,这不会与 systemd 一起工作。
使用以下命令启动 MinIO 服务器:
1sudo systemctl start minio
查看状态:
1sudo systemctl status minio
输出应该是这样的:
1[secondary_label Output]
2minio.service - MinIO
3 Loaded: loaded (/etc/systemd/system/minio.service; disabled; vendor preset: enabled)
4 Active: active (running) since Mon 2022-05-23 02:55:03 UTC; 2s ago
5 Docs: https://docs.min.io
6 Process: 21978 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default>
7 Main PID: 21989 (minio)
8 Tasks: 7
9 Memory: 49.5M
10 CGroup: /system.slice/minio.service
11 └─21989 /usr/local/bin/minio server --certs-dir /home/finid/.minio/certs --console-address :9001 /mnt/data
12
13May 23 02:55:03 minio-buntu systemd[1]: Starting MinIO...
14May 23 02:55:03 minio-buntu systemd[1]: Started MinIO.
15May 23 02:55:03 minio-buntu minio[21989]: WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you chang>
16May 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:/>
17May 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:>
18May 23 02:55:03 minio-buntu minio[21989]: Documentation: https://docs.min.io
19May 23 02:55:03 minio-buntu minio[21989]: Finished loading IAM sub-system (took 0.0s of 0.0s to load data).
如果上述输出中的API和控制台引用https
,一切都按预期工作。
但是,如果 API 和 Console 引用「http」,即使 MinIO 成功启动,也发生了错误,您可能需要使用步骤 4 生成新的证书,以便直接到「https」;然后重新启动 MinIO 服务。如果证书文件不在正确的目录中,或如果 MinIO 用户不拥有它们,则可能出现另一个错误源。
在此步骤中,您启动了 MinIO 服务器,接下来,您将连接到它。
步骤 6 — 通过 MinIO 控制台安全连接到 MinIO 服务器
MinIO Console是执行访问日志监控和服务器配置等管理任务的图形界面,在此步骤中,您将通过此控制台连接到MinIO服务器。
点击您的浏览器到 https://your-server-ip:9001
。
<$>[注意]
注意: 由于没有 Web 服务器参与,所以 http://your-server-ip:9001
不会重定向到 https://your-server-ip:9001
. 始终使用 https://your-server-ip:9001
访问您的 MinIO 控制台。
<$>
由于证书是自签名的,您的浏览器会发出类似于此图像中的提示:
如果你正在使用Firefox,请点击Advanced
,然后点击Accept the Risk
和Continue
。
MinIO Console 登录屏幕现在将加载:
使用在步骤 2 中创建的 MinIO 环境文件中配置的凭证登录。
成功登录后,主界面将像这样加载:
您可以从控制台界面执行管理任务,例如查看日志、创建和管理存储库、用户和组以及其他服务器配置任务。
您现在已经通过其图形界面连接到MinIO服务器,在下一步,您将在您的个人计算机上安装和使用MinIO客户端,并使用它连接到MinIO服务器。
步骤 7 — 在本地计算机上安装和使用 MinIO 客户端
MinIO 客户端是您在本地计算机上安装的 MinIO 组件,并用于管理 MinIO 服务器。本步中的所有命令将在本地计算机的命令行上完成。与 MinIO 服务器一样,客户端可以从二进制文件或.deb 包中安装。
在您本地计算机上的新终端会话中,请从 MinIO 下载页面下载最新的 MinIO 客户端 .deb
包:
1wget https://dl.min.io/client/mc/release/linux-amd64/mcli_20220509040826.0.0_amd64.deb
「wget」將名為「mcli_20220509040826.0.0_amd64.deb」的檔案放入您的工作目錄。
1sudo dpkg -i mcli_20220509040826.0.0_amd64.deb
此命令使 MinIO 客户端在您的个人计算机上可用,然后您可以使用mcli
命令调用它。 为了初始化客户端并启用您的壳的自动完成,这将有助于键入客户端命令,发出以下命令:
1mcli --autocompletion
你会得到这样的输出:
1[secondary_label Output]
2mcli: Configuration written to `/home/sammy/.mcli/config.json`. Please update your access credentials.
3mcli: Successfully created `/home/sammy/.mcli/share`.
4mcli: Initialized share uploads `/home/sammy/.mcli/share/uploads.json` file.
5mcli: Initialized share downloads `/home/sammy/.mcli/share/downloads.json` file.
6mcli: Your shell is set to 'bash', by env var 'SHELL'.
7mcli: enabled autocompletion in your 'bash' rc file. Please restart your shell.
此输出告知您隐藏的配置文件夹和其它文件夹和配置文件的位置。
要在实际上不关闭和重新启动当前壳中启用自动完成,请发出以下命令:
1source .profile
外面的框,配置文件包含 MinIO 服务器的访问凭证,您可以使用 MinIO 客户端来管理它. 您可以在终端编辑器中编辑该文件,或者您可以使用mcli
添加一个条目。
若要在「mcli」的配置文件中添加您的MinIO服务器的条目,请使用下列命令与您在步骤 2中为服务器设置的凭据:
1mcli --insecure alias set myminio/ https://your-server-ip:9000 minioadmin minioadmin
在alias set
命令之后的名称可以设置为任何东西,在这种情况下,它被设置为myminio/
。
如果没有它,命令将失败,因为客户端将尝试验证该证书来自一个受信任的证书管理机构。
<$>[注]
** 提示:** 使用 MinIO 客户端连接到 MinIO 服务器时,请始终以 --insecure
旗号拨打 mcli
命令. 这并不意味着连接不安全.这只是意味着客户端不会试图验证证证书的真实性。
使用以下命令查看 ~/.mcli/config.json
文件的内部:
1sudo nano ~/.mcli/config.json
您将看到您刚刚添加的myminio
主机:
1[label ~/.mcli/config.json]
2{
3 "version": "10",
4 "aliases": {
5 "gcs": {
6 "url": "https://storage.googleapis.com",
7 "accessKey": "YOUR-ACCESS-KEY-HERE",
8 "secretKey": "YOUR-SECRET-KEY-HERE",
9 "api": "S3v2",
10 "path": "dns"
11 },
12 "local": {
13 "url": "http://localhost:9000",
14 "accessKey": "",
15 "secretKey": "",
16 "api": "S3v4",
17 "path": "auto"
18 },
19 "myminio": {
20 "url": "https://your_server_ip:9000",
21 "accessKey": "minioadmin",
22 "secretKey": "minioadmin",
23 "api": "S3v4",
24 "path": "auto"
25 },
26 "play": {
27 "url": "https://play.min.io",
28 "accessKey": "ACCESS-KEY",
29 "secretKey": "SECRET-KEY",
30 "api": "S3v4",
31 "path": "auto"
32 },
33 "s3": {
34 "url": "https://s3.amazonaws.com",
35 "accessKey": "YOUR-ACCESS-KEY-HERE",
36 "secretKey": "YOUR-SECRET-KEY-HERE",
37 "api": "S3v4",
38 "path": "dns"
39 }
40 }
您现在已经准备好探索客户端附带的命令. 使用-h
旗进行运行,以打印帮助页面:
1mcli -h
输出应包括以下内容:
1[secondary_label Output]
2COMMANDS:
3 alias manage server credentials in configuration file
4 ls list buckets and objects
5 mb make a bucket
6 rb remove a bucket
7 cp copy objects
8 mv move objects
9 rm remove object(s)
10 mirror synchronize object(s) to a remote site
11 cat display object contents
12 head display first 'n' lines of an object
13...
14...
15
16GLOBAL FLAGS:
17 --autocompletion install auto-completion for your shell
18 --config-dir value, -C value path to configuration folder (default: "/home/finid/.mcli")
19 --quiet, -q disable progress bar display
20 --no-color disable color theme
21 --json enable JSON lines formatted output
22 --debug enable debug output
23 --insecure disable SSL certificate verification
24 --help, -h show help
25 --version, -v print the version
26...
有关如何使用任何命令的提示,请用-h
选项调用它,例如:
1mcli alias -h
要收集有关 MinIO 服务器的信息,键入:
1mcli --insecure admin info myminio
结果将类似于此:
1[secondary_label Output]
2● your-server-ip:9000
3 Uptime: 8 hours
4 Version: 2022-05-19T18:20:59Z
當 MinIO 伺服器正在運行時,您可以使用:
1mcli --insecure admin service restart myminio
如果 MinIO 服务器被停止,您必须登录到服务器并从步骤 5 开始使用 systemctl
命令,您可以使用:
1mcli --insecure admin service stop myminio
在此步骤中,您使用mcli
命令从本地计算机连接到您的MinIO服务器,并使用--insecure
旗帜。
结论
在本教程中,您使用 MinIO 设置了对象存储服务器,并通过自签名的证书创建了一个安全连接,您还使用 MinIO Console 连接到 MinIO 服务器,并通过您在个人电脑上安装的 MinIO 客户端连接到 MinIO 服务器。
此设置是用于小型开发项目和评估目的的独立系统.当您准备好在生产或大型开发项目中使用它时,您应该在分布式模式下设置它。
Standalone 设置的存储容量仅限于服务器的存储容量,但您可以使用 Block Storage Volumes将服务器的存储容量扩展到 80 TB。