作者选择了Open Internet/Free Speech Fund作为[Write for DOnations](https:/ /do.co/w4do-cta) 程序.

介绍

从基于云的备份解决方案到高可用性 内容交付网络 (CDN),存储对象数据的非结构化 blob 并使其可通过 HTTP API 访问的能力,称为 [object storage](https://www.digitalocean.com/community/tutorials/object-storage-vs-block-storage- services#what-is-object-storage),已成为现代技术领域不可或缺的一部分。

Minio 是一款流行的开源对象存储服务器,兼容[Amazon S3 云存储服务](https://aws.amazon.com/free/storage/? sc_channelu003dPS&sc_campaignu003dacquisition_US&sc_publisheru003dgoogle&sc_mediumu003dACQ-P%7CPS-GO%7CBrand%7CDesktop%7CSU%7CStorage%7CS3%7CUS%7CEN%7CText&sc_contentu003ds3_e&sc_detailu003damazon%20s3&sc_categoryu003dStorage&sc_segmentu003d293617570044&sc_matchtypeu003de&sc_countryu003dUS&s_kwcidu003dAL!4422! 3!293617570044!e!!g!!amazon%20s3&ef_idu003dEAIaIQobChMI0JiSkYys5gIVRZyzCh3Y8wcFEAAYASAAEgLqg_D_BwE:G:s)。已配置为与 Amazon S3 通信的应用程序也可以配置为与 Minio 通信,如果您希望对对象存储服务器进行更多控制,Minio 可以成为 S3 的可行替代方案。该服务存储非结构化数据,例如照片、视频、日志文件、备份和容器/VM 映像,甚至可以提供单个对象存储服务器,将分布在许多服务器上的多个驱动器汇集在一起。

Minio 用 Go 编写,自带命令行客户端和浏览器界面,支持【高级消息队列协议(AMQP)】的简单队列服务(https://www.digitalocean.com/community/tutorials/an-advanced -message-queuing-protocol-amqp-walkthrough), [Elasticsearch](https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on- ubuntu-18-04)、Redis、NATS 和 [PostgreSQL](https://www.digitalocean.com/ community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04) 目标。由于所有这些原因,学习设置 Minio 对象存储服务器可以为您的项目增加广泛的灵活性和实用性。

在本教程中,您将:

  • 在您的 Ubuntu 18.04 服务器上安装 Minio 服务器并将其配置为 systemd 服务。

  • 使用 Let's Encrypt 设置 SSL/TLS 证书,以保护服务器和客户端之间的通信。

  • 通过 HTTPS 访问 Minio 的浏览器界面以使用和管理服务器。

先决条件

要完成本教程,您需要:

  • 按照 我们的 Ubuntu 18.04 初始服务器设置教程 设置一台 Ubuntu 18.04 服务器,包括一个sudo 非 root 用户和防火墙。

  • 一个完全注册的域名。您可以在 Namecheap 上购买一台,或者在 Freenom 上免费获得一台。在本教程中,您的域将表示为 your_domain

  • 为您的 Minio 服务器设置的以下 DNS 记录。您可以按照 我们的 DNS 记录文档 了解如何为 DigitalOcean Droplet 添加它们的详细信息。

  • 带有您的服务器名称的 A 记录(例如 minio-server.your_domain)指向您的对象服务器的 IPv4 地址。

  • (可选) 如果您希望通过 IPv6 访问您的服务器,您需要一个 AAAA 记录,其中您的服务器名称指向您的对象服务器的 IPv6 地址。

步骤 1 — 安装和配置 Minio 服务器

您可以通过编译源代码或通过二进制文件安装 Minio 服务器。要从源代码安装它,您的系统上至少需要安装 Go 1.12。

在这一步中,您将通过预编译的二进制文件安装服务器,然后配置 Minio 服务器。

首先,登录到您的服务器,将 sammy 替换为您的用户名,将 your_server_ip 替换为您的 Ubuntu 18.04 服务器的 IP 地址:

ssh sammy@your_server_ip

如果您最近没有更新包数据库,请立即更新:

sudo apt 更新

接下来,从官网下载Minio服务器的二进制文件:

wget https://dl.min.io/server/minio/release/linux-amd64/minio

您将收到类似于以下内容的输出:

输出--2019-08-27 15:08:49-- https://dl.min.io/server/minio/release/linux-amd64/minio
正在解决dl.min.io(dl.min.io)... 178.128.69.202
连接到 dl.min.io (dl.min.io)|178.128.69.202|:443... 已连接。
HTTP 请求已发送,等待响应... 200 OK
长度:44511616 (42M) [application/octet-stream]
保存到:'minio'

minio 100%[u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d>] 42.45M 21.9MB/s 1.9s

2019-08-27 15:08:51 (21.9 MB/s) - 'minio' 已保存。

下载完成后,一个名为 minio 的文件将在您的工作目录中。使用以下命令使其可执行:

sodo hmod +x minio

现在,将文件移动到 Minio 的 systemd 启动脚本期望找到的 /usr/local/bin 目录中:

sudo mv minio /usr/local/bin

这将允许我们在本教程后面编写一个 服务单元文件在启动时自动运行 Minio。

出于安全原因,最好避免将 Minio 服务器作为 root 运行。如果受到损害,这将限制对您的系统造成的损害。由于您将在第 2 步中使用的 systemd 脚本会查找名为 minio-user 的用户帐户和组,因此请使用此名称创建一个新用户:

sudo useradd -r minio-user -s /sbin/nologin

在此命令中,您使用 -s 标志将 /sbin/nologin 设置为 minio-user 的 shell。这是一个不允许用户登录的 shell,minio-user 不需要它。

接下来,将 Minio 二进制文件的所有权更改为 minio-user:

sudo chown minio - 用户:minio - 用户/usr/local/bin/minio

接下来,您将创建一个 Minio 将存储文件的目录。这将是 buckets 的存储位置,您稍后将使用它来组织您存储在 Minio 服务器上的对象。本教程将把目录命名为 minio:

sudo mkdir /usr/local/share/minio

将该目录的所有权授予 minio-user:

sudo chown minio - 用户:minio - 用户/usr/local/share/minio

大多数服务器配置文件存储在 /etc 目录中,因此在此处创建您的 Minio 配置文件:

须藤 mkdir /etc/minio

将该目录的所有权也交给minio-user:

sudo chown minio-user:minio-user /etc/minio

使用 Nano 或您喜欢的文本编辑器创建修改默认配置所需的环境文件:

须藤纳米/etc/default/minio

打开文件后,添加以下行以在您的环境文件中设置一些重要的环境变量:

/etc/default/minio

MINIO_ACCESS_KEYu003d"迷你"
MINIO_VOLUMESu003d"/usr/local/share/minio/"
MINIO_OPTSu003d"-C /etc/minio --address your_server_ip:9000"
MINIO_SECRET_KEYu003d"迷你存储"

让我们看看这些变量和您设置的值:

  • MINIO_ACCESS_KEY:这设置了您将用于访问 Minio 浏览器用户界面的访问密钥。

  • MINIO_SECRET_KEY:这将设置您将用于完成登录凭据到 Minio 界面的私钥。本教程已将值设置为 miniostorage,但我们建议选择一个不同的、更复杂的密码来保护您的服务器。

  • MINIO_VOLUMES:标识您为存储桶创建的存储目录。

  • MINIO_OPTS:这会改变服务器提供数据的位置和方式。 -C 标志将 Minio 指向它应该使用的配置目录,而 --address 标志告诉 Minio 要绑定的 IP 地址和端口。如果不指定 IP 地址,Minio 将绑定到服务器上配置的每个地址,包括 localhost 和任何 Docker 相关的 IP 地址,所以这里建议直接指定 IP 地址。如果您愿意,可以更改默认端口“9000”。

最后,完成更改后保存并关闭环境文件。

您现在已经安装了 Minio 并设置了一些重要的环境变量。接下来,您将配置服务器以作为系统服务运行。

步骤 2 — 安装 Minio Systemd 启动脚本

在这一步中,您将配置 Minio 服务器作为“systemd”服务进行管理。

首先,使用以下命令下载官方的【Minio服务描述符文件】(https://github.com/minio/minio-service/blob/master/README.md):

curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

您将收到类似于以下内容的输出:

输出
% 总计 % 接收 % Xferd 平均速度 时间 时间 时间 当前
下载上传总花费剩余速度
100 835 100 835 0 0 6139 0 --:--:-- --:--:-- --:--:-- 6139

下载完成后,一个名为 minio.service 的文件将在您的工作目录中。

要在应用之前审核 minio.service 的内容,请在文本编辑器中打开它以查看其内容:

纳米 minio.service

这将显示以下内容:

/etc/systemd/system/minio.service

[单元]
描述u003dMinIO
文档u003dhttps://docs.min.io
Wantsu003dnetwork-online.target
Afteru003dnetwork-online.target
AssertFileIsExecutableu003d/usr/local/bin/minio

[服务]
工作目录u003d/usr/local/

用户u003d迷你用户
组u003d迷你用户

EnvironmentFileu003d/etc/default/minio
ExecStartPreu003d/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"

ExecStartu003d/usr/local/bin/minio 服务器 $MINIO_OPTS $MINIO_VOLUMES

# 让 systemd 总是重启这个服务
重启u003d总是

# 指定此进程可以打开的最大文件描述符数
限制NOFILEu003d65536

# 禁用超时逻辑并等待进程停止
TimeoutStopSecu003d无穷大
发送SIGKILLu003d否

[安装]
WantedByu003d多用户.target

# 为 ${project.name}-${project.version} (${project.name}) 构建

该服务单元文件使用您之前创建的 minio-user 用户启动 Minio 服务器。它还实现了您在上一步中设置的环境变量,并使服务器在启动时自动运行。有关 systemd 单元文件的更多信息,请参阅我们的指南 了解 Systemd 单元和单元文件。

查看脚本内容后,关闭文本编辑器。

Systemd 要求将单元文件存储在 systemd 配置目录中,因此将 minio.service 移到那里:

sudo mv minio.service /etc/systemd/system

然后,运行以下命令重新加载所有 systemd 单元:

sudo systemctl daemon-reload

最后,使 Minio 在启动时启动:

sudo systemctl 启用 minio

这将给出以下输出:

OutputCreated 从 /etc/systemd/system/multi-user.target.wants/minio.service 到 /etc/systemd/system/minio.service 的符号链接。

现在已经安装并配置了 systemd 脚本,是时候启动服务器了。

步骤 3 — 启动 Minio 服务器

在此步骤中,您将启动服务器并修改防火墙以允许通过浏览器界面进行访问。

首先,启动 Minio 服务器:

sudo systemctl 启动 minio

接下来,通过运行以下命令验证 Minio 的状态、绑定的 IP 地址、内存使用情况等:

sudo systemctl status minio

您将获得以下输出:

输出● minio.service - MinIO
已加载:已加载(/etc/systemd/system/minio.service;已启用;供应商预设:已启用)
活动:自 2019 年 12 月 9 日星期一 21:54:02 UTC 起活动(运行); 46 秒前
文档:https://docs.min.io
进程:3405 ExecStartPreu003d/bin/bash -c if [ -z "${MINIO_VOLUMES}" ];然后回显“/etc/default/minio 中未设置变量 MINIO_VOLUMES”; 1号出口; fi (codeu003dexited, statusu003d0/SUCCES
主 PID:3407(小型)
任务:7(限制:1152)
CGroup:/system.slice/minio.service
└─3407 /usr/local/bin/minio server -C /etc/minio --address your_server_IP:9000 /usr/local/share/minio/

12 月 9 日 21:54:02 cart-Minion-Object-1804-1 systemd[1]:启动 MinIO。
12 月 9 日 21:54:03 cart-Minion-Object-1804-1 minio[3407]:端点:http://your_server_IP:9000
12 月 9 日 21:54:03 cart-Minion-Object-1804-1 minio[3407]:浏览器访问:
12 月 9 日 21:54:03 cart-Minion-Object-1804-1 minio[3407]: http://your_server_IP:9000
...

接下来,启用通过防火墙访问配置端口上的 Minio 服务器。在本教程中,这是端口 9000。

首先添加规则:

sudo ufw 允许 9000

然后,启用防火墙:

sudo ufw 启用

您将收到以下提示:

OutputCommand 可能会中断现有的 ssh 连接。继续操作 (y|n)?

yENTER 确认。然后,您将获得以下输出:

OutputFirewall 在系统启动时处于活动状态并启用

Minio 现在已准备好接受流量,但在连接到服务器之前,您将通过安装 SSL/TLS 证书来保护通信。

第 4 步 — 使用 TLS 证书保护对 Minio 服务器的访问

在此步骤中,您将使用从证书颁发机构 (CA) 获得的私钥和公共证书保护对 Minio 服务器的访问,在本例中为 Let's Encrypt。要获得免费的 SSL 证书,您将使用 Certbot。

首先,允许通过防火墙进行 HTTP 和 HTTPS 访问。为此,请打开端口“80”,这是 HTTP 的端口:

sudo ufw 允许 80

接下来,为 HTTPS 打开端口“443”:

须藤 ufw 允许 443

添加这些规则后,使用以下命令检查防火墙的状态:

sudo ufw 状态详细

您将收到类似于以下内容的输出:

输出状态:活动
日志记录:开(低)
默认值:拒绝(传入)、允许(传出)、禁用(路由)
新配置文件:跳过

采取行动
-- ------ ----
22/tcp (OpenSSH) 允许在任何地方
9000 允许在任何地方
第443章
80 允许在任何地方
22/tcp (OpenSSH (v6)) 允许在任何地方 (v6)
9000 (v6) 允许在任何地方 (v6)
443 (v6) 允许在任何地方 (v6)
80 (v6) 允许在任何地方 (v6)

这确认端口“80”和“443”已打开,确保您的服务器接受来自互联网的请求。

接下来,您将安装 Certbot。由于 Certbot 维护一个单独的 PPA 存储库,因此在安装 Certbot 之前,您首先必须将其添加到存储库列表中,如下所示:

要准备添加 PPA 存储库,首先安装 software-properties-common,这是一个用于管理 PPA 的软件包:

sudo apt install software-properties-common

这个包提供了一些有用的脚本来添加和删除 PPA,而不是手动执行。

现在添加 Universe 存储库:

sudo add-apt-repository 宇宙

这个存储库包含由 Ubuntu 社区维护的免费和开源软件,但不是由 Ubuntu 的开发人员 Canonical 官方维护的。我们将在这里找到 Certbot 的存储库。

接下来,添加 Certbot 存储库:

sudo add-apt-repository ppa:certbot/certbot

您将收到以下输出:

OutputThis 是 Debian Let's Encrypt Team 准备的软件包的 PPA,并为 Ubuntu 反向移植。
更多信息:https://launchpad.net/~certbot/+archive/ubuntu/certbot
按 [ENTER] 继续或按 ctrl-c 取消添加

ENTER接受。

然后更新包列表:

sudo apt 更新

最后,安装 certbot:

sudo apt install certbot

接下来,您将使用 certbot 生成新的 SSL 证书。

由于 Ubuntu 18.04 尚不支持自动安装,您将使用 certonly 命令和 --standalone 获取证书:

sudo certbot certonly --standalone -d minio-server.your_domain

--standalone 表示此证书适用于内置的 standalone web 服务器。有关这方面的更多信息,请参阅我们的 [如何使用 Certbot 独立模式检索让我们在 Ubuntu 18.04 上加密 SSL 证书](https://www.digitalocean.com/community/tutorials/how-to-use-certbot-standalone- mode-to-retrieve-let-s-encrypt-ssl-certificates-on-ubuntu-1804)教程。

您将收到以下输出:

输出保存调试日志到 /var/log/letsencrypt/letsencrypt.log
选择的插件:Authenticator Standalone,Installer None
输入电子邮件地址(用于紧急续订和安全通知)(输入“c”以
取消):

添加您的电子邮件,然后按“ENTER”。

然后,Certbot 将要求您注册 Let's Encrypt:

输出- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
请阅读服务条款
https://translate.google.com/translate?hl=en&sl=auto&tl=zh&u=https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
同意以便在 ACME 服务器上注册
https://translate.google.com/translate?hl=en&sl=auto&tl=zh&u=https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) 格力/(C) 取消:

输入“A”并按“ENTER”表示同意。

接下来,您将被询问是否愿意与 Electronic Frontier Foundation 分享您的电子邮件:

输出- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
您愿意与电子前沿分享您的电子邮件地址吗
基金会,Let's Encrypt 项目和非营利组织的创始合伙人
开发 Certbot 的组织?我们想向您发送有关我们工作的电子邮件
加密网络、EFF 新闻、活动和支持数字自由的方式。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

一旦您回答“Y”或“N”,您的公钥和私钥将被生成并保存在“/etc/letsencrypt/live/minio-server.your_domain_name”目录中。

接下来,将这两个文件(privkey.pemfullchain.pem)复制到 Minio 的服务器配置文件夹下的 certs 目录下,本教程的目录为 /etc/minio。使用以下内容复制 privkey.pem 并重命名文件 private.key:

sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key

然后对 fullchain.pem 执行相同的操作,将结果命名为 public.crt:

sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/fullchain.pem /etc/minio/certs/public.crt

现在,将文件的所有权更改为“minio-user”。首先,对 private.key 执行此操作:

sudo chown minio-user:minio-user /etc/minio/certs/private.key

然后是public.crt:

sudo chown minio-user:minio-user /etc/minio/certs/public.crt

重启 Minio 服务器,让它知道证书并开始使用 HTTPS:

sudo systemctl 重启 minio

Let's Encrypt 证书的有效期只有九十天。这是为了鼓励用户自动化他们的证书更新过程。您安装的 Certbot 软件包会自动将更新脚本添加到 /etc/cron.d。此脚本每天运行两次,并将自动更新到期后三十天内的任何证书。

这样,Minio 的连接现在是安全的,SSL/TLS 证书将自动为您续订。在下一步中,您将通过浏览器连接到 Minio 以使用服务器。

第 5 步 — 使用 HTTPS 安全连接到 Minio 的 Web 界面

在这一步中,您将通过 HTTPS 安全地连接到 Minio Web 界面,然后您将创建存储桶并将对象上传到其中。

通过将浏览器指向“https://minio-server.your_domain:9000”来访问 Web 界面。

您将看到 Minio 服务器登录屏幕:

Minio登录界面

现在,通过输入您的凭据登录到主界面。对于Access Key,输入您在Step 1 中的/etc/default/minio 环境文件中设置的MINIO_ACCESS_KEY。对于 Secret Key,输入您在同一文件中设置的 MINIO_SECRET_KEY。输入凭据后,单击输入字段正下方带有箭头的圆形按钮。

然后您将看到 Minio 用户界面。要创建一个可以存储对象的新存储桶,请单击主界面右下角的浅红色 + 按钮,以弹出两个额外的黄色按钮。

Minio的主界面

单击中间的黄色按钮并在提示中输入新存储桶的名称,然后按“ENTER”键保存您的响应。您的新存储桶现在可以用于存储了。

注意: 在命名 Minio 存储桶时,请确保您的名称仅包含小写字母、数字或连字符。 Minio 限制存储桶命名约定以兼容 AWS S3 标准。

当您想将对象添加到存储桶中时,请单击与以前相同的浅红色按钮,然后单击顶部的黄色按钮以打开文件上传提示。

至此,您已经完成了创建存储桶和上传对象的整个基本 Web 界面。

结论

您现在拥有自己的 Minio 对象存储服务器,您可以使用 Let's Encrypt SSL/TLS 证书从 Web 界面安全地连接到该服务器。或者,您可能希望查看适用于 FreeBSD、Linux、Mac 和 Windows 的 Minio 桌面客户端,作为使用和管理您的对象存储服务器。

此外,如果您想增加 Minio 安装的存储容量超出服务器磁盘大小,您可以使用 [DigitalOcean 的块存储服务](https://www.digitalocean.com/community/tutorials/how-to-use- block-storage-on-digitalocean)将卷附加到您的服务器,将存储容量扩展多达 80 TB。

有关 Minio 的更多信息,请访问 项目的文档网站。如果您想了解有关对象存储的更多信息,请浏览我们的 对象存储教程。

Logo

更多推荐