介绍
从基于云的备份解决方案到高可用性内容交付网络 (CDN),对象存储已成为现代技术领域不可或缺的一部分。 而且,Minio 对象存储服务器具有占用空间小、界面简单、兼容多种云存储服务的特点。
Minio 是一个开源对象存储服务器,可将照片、视频、虚拟机图像、容器和日志文件等非结构化数据存储为对象。 在分布式模式下,Minio 提供了一个单一的对象存储服务器,它汇集了分布在许多服务器上的多个驱动器。
Minio 用 Go 编写,自带命令行客户端和浏览器界面,支持 Advanced Message Queuing Protocol (AMQP), Elasticsearch, Redis[ X207X]、NATS 和 Postgres 目标。
在本教程中,您将:
- 在您的 DigitalOcean 服务器上安装 Minio 服务器并将其配置为 systemd 服务。
- 使用 Let's Encrypt 设置 SSL/TLS 证书以保护服务器和客户端之间的通信。
- 通过 HTTPS 访问 Minio 的浏览器界面以使用和管理服务器。
先决条件
要完成本教程,您需要:
- 按照这个Ubuntu 16.04初始服务器设置教程设置一台Ubuntu 16.04服务器,包括sudo非root用户和防火墙。
- 完全注册的域名。 您可以在 Namecheap 上购买一个或在 Freenom 上免费获得一个。
- 为您的 Minio 服务器设置了以下 DNS 记录。 您可以关注 this hostname tutorial 了解如何添加它们的详细信息。
- 带有您的服务器名称的 A 记录(例如
minio-server.example.com
) 指向您的对象服务器的 IPv4 地址。 - 如果您希望您的服务器可通过 IPv6 访问,则您的服务器名称指向您的对象服务器的 IPv6 地址的 AAAA 记录。
- 带有您的服务器名称的 A 记录(例如
- 使用本指南在服务器 上安装 Go,以在 Ubuntu 16.04 上安装 Go。
第 1 步 — 安装和配置 Minio 服务器
您可以通过编译源代码或通过二进制文件安装 Minio 服务器。 在这一步中,我们将以最简单的方式安装服务器——通过二进制文件——然后我们将随后配置所有内容。
首先,登录您的服务器:
ssh sammy@your_server_ip
如果您最近没有更新包数据库,请立即更新:
sudo apt-get update
接下来,下载 Minio 服务器的二进制文件:
curl -O https://dl.minio.io/server/minio/release/linux-amd64/minio
一个名为 minio
的文件将被下载到您的工作目录中。 使其可执行:
sudo chmod +x minio
现在,将文件移动到 Minio 的 systemd 启动脚本期望找到的 /usr/local/bin
目录中:
sudo mv minio /usr/local/bin
出于安全原因,我们不想将 Minio 服务器作为 root 运行。 而且,由于我们将在第 2 步中使用的 systemd 脚本会查找名为 minio-user 的用户帐户和组,因此现在让我们创建它们。
sudo useradd -r minio-user -s /sbin/nologin
将二进制文件的所有权更改为 minio-user:
sudo chown minio-user:minio-user /usr/local/bin/minio
接下来,我们需要创建一个 Minio 将存储文件的目录。 这将是您将在第 5 步中创建的 buckets 的存储位置。
sudo mkdir /usr/local/share/minio
将该目录的所有权授予 minio-user:
sudo chown minio-user:minio-user /usr/local/share/minio
/etc
目录是服务器配置文件最常见的位置,因此我们将在那里为 Minio 创建一个位置。
sudo mkdir /etc/minio
将该目录的所有权也授予 minio-user:
sudo chown minio-user:minio-user /etc/minio
使用 nano 或您喜欢的文本编辑器创建修改默认配置所需的环境文件:
sudo nano /etc/default/minio
并且,添加以下变量:
/etc/default/minio
MINIO_VOLUMES="/usr/local/share/minio/" MINIO_OPTS="-C /etc/minio --address your-server-ip:9000"
- MINIO_VOLUMES:指向您之前创建的存储目录。
- MINIO_OPTS:修改服务器的行为。 -C 标志将 Minio 指向它应该使用的配置目录,而 –address 标志告诉 Minio 要绑定的 IP 地址和端口。 如果未指定 IP 地址,Minio 将绑定到服务器上配置的每个地址,包括 localhost 和任何 Docker 相关的 IP 地址,因此最好在此文件中明确指定 IP 地址。 默认端口为 9000,但您可以选择其他端口。
最后,完成更改后保存并关闭环境文件。
Minio 现在已安装,因此,接下来,我们将配置服务器以作为系统服务运行。
第 2 步 — 安装 Minio Systemd 启动脚本
在这一步中,我们将配置 Minio 服务器作为 systemd 服务进行管理。 首先,使用以下命令下载 Minio 服务描述符文件:
curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
下载完成后,一个名为 minio.service
的文件应该在您的工作目录中。
要在应用之前审核 minio.service
的内容,请在文本编辑器中打开它以查看其内容:
nano minio.service
一旦您对脚本的内容感到满意,请关闭您的文本编辑器。
Systemd 要求将单元文件存储在 systemd 配置目录中,因此将 minio.service
移动到那里:
sudo mv minio.service /etc/systemd/system
然后,运行以下命令重新加载所有 systemd 单元:
sudo systemctl daemon-reload
最后,使 Minio 在启动时启动:
sudo systemctl enable minio
现在已经安装并配置了 systemd 脚本,让我们启动服务器。
第 3 步 — 启动 Minio 服务器
在此步骤中,您将启动服务器并修改防火墙以允许通过浏览器界面进行访问。
首先,启动 Minio 服务器:
sudo systemctl start minio
您可以使用以下命令验证 Minio 的状态、绑定的 IP 地址、内存使用情况等:
sudo systemctl status minio
您应该得到如下输出:
Outputminio.service - Minio Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2017-04-07 00:26:10 UTC; 11min ago Docs: https://docs.minio.io Process: 25069 ExecStartPre=/bin/bash -c [ -n "${MINIO_VOLUMES}" ] || echo "Variable MINIO_VOLUMES not set in /etc/default/minio" (code=exit Main PID: 25073 (minio) Tasks: 6 Memory: 20.7M CPU: 544ms CGroup: /system.slice/minio.service └─25073 /usr/local/bin/minio server -C /etc/minio --address :9000 /usr/local/share/minio/ Apr 07 00:26:11 ashtonandgray minio[25073]: Browser Access: Apr 07 00:26:11 ashtonandgray minio[25073]: http://174.138.67.91:9000
接下来,您需要在配置的端口上启用通过防火墙对 Minio 服务器的访问。 在本教程中,这是端口 9000
。
所以,首先添加规则:
sudo ufw allow 9000
然后,重新启动防火墙:
sudo systemctl restart ufw
Minio 现在已准备好接受流量,但在连接到服务器之前,让我们通过安装 SSL/TLS 证书来保护通信。
第 4 步 — 使用 Let's Encrypt SSL/TLS 证书保护对 Minio 服务器的访问
在此步骤中,我们将使用基于控制台的证书生成客户端 Concert,使用开源 Let's Encrypt 证书颁发机构创建 SSL/TLS 证书。 虽然还有其他方法可以生成 Let's Encrypt 证书,但 Concert 既是由 Minio 的开发人员编写的,也是官方 安装说明 的一部分。
首先,使用以下命令下载 Concert:
go get -u github.com/minio/concert
完成后,名为 concert
的文件应该位于 GOPATH 的 bin
目录中。
接下来,我们将生成证书。
注意: 要生成证书,concert
要求允许通过端口 443 的流量通过防火墙。
使用 --dirs
标志运行以下命令,告诉 Concert 您要使用的输出目录、电子邮件地址和域名:
sudo GOPATH/bin/concert gen --dir minio-certs sammy@example.com example.com
输出将如下所示:
Output2017/04/09 01:21:08 Generated certificates for example.com under minio-certs will expire in 89 days.
而且,Concert 将生成一个 private.key
和一个 public.crt
文件,您可以通过在您指定的目录上运行 ls
来验证它们。
接下来,我们将这两个文件复制到 Minio 的服务器配置文件夹下的 certs
目录下,本教程为 /etc/minio
。
sudo cp minio-certs/private.key /etc/minio/certs/ sudo cp minio-certs/public.crt /etc/minio/certs/
现在,将文件的所有权更改为 minio-user:
sudo chown minio-user:minio-user /etc/minio/certs/private.key sudo chown minio-user:minio-user /etc/minio/certs/public.crt
重启 Minio 服务器,让它知道证书并开始使用 HTTPS:
sudo systemctl restart minio
由于生成的 Let's Encrypt 证书的有效期仅为 90 天,并且手动重复更新它会效率低下,因此在服务器模式下启动 Concert 以设置一个系统来自动更新证书:
sudo concert server --dir minio-certs sammy@example.com example.com
有了这个,Minio 的连接现在是安全的,SSL/TLS 证书将自动为您更新。 在下一步中,您将通过浏览器连接到 Minio 以使用和管理服务器。
第 5 步 — 使用 HTTPS 安全连接到 Minio 的 Web 界面
在此步骤中,您将通过 HTTPS 安全地连接到 Minio Web 界面,然后您将创建存储桶并将对象上传到其中。
通过将浏览器指向 https://example.com:9000
来访问 Web 界面。
接下来,您需要找到您的登录凭据。 当您在步骤 3 中启动服务器时,Minio 将其配置文件写入 /etc/minio
目录。 该配置文件 config.json
包含您现在需要访问服务器的 accessKey 和 secretKey 值。 请务必将这两个密钥复制并保存在易于获取且安全的地方,以备将来使用。
/etc/minio/config.json
{ "version": "19", "credential": { "accessKey": "8ngv6i97QZV959Y87Y007FP", "secretKey": "C6hK8ytyBe3Q952bght65434JiZN08itG49jG5RX" }, "region": "us-east-1", ... }
现在,通过输入您的凭据并单击输入字段正下方带有箭头的圆形按钮登录主界面。
从那里,单击主界面右下方的浅红色 + 按钮,会弹出两个额外的黄色按钮。
单击中间的黄色按钮并在提示中输入新存储桶的名称,然后按 ENTER
键保存您的响应。 您的新存储桶现在可以用于存储了!
当您想将对象添加到您的存储桶中时,单击与之前相同的浅红色按钮,然后单击顶部,黄色按钮以打开文件上传提示。
注意: Minio 对象存储服务器上的对象最大可达到 5 TB,远远超过单个 DigitalOcean 服务器所能容纳的容量,但使用 DigitalOcean 的块存储服务 ,您可以大大扩展独立 Minio 服务器的可用存储量。
至此,您已经完成了整个基本 Web 界面,但除了创建存储桶和上传对象之外,您还可以生成新的登录凭证、在对象的可共享链接上设置过期日期以及完全删除对象。
结论
您现在拥有自己的使用 Minio 的对象存储服务器,您可以使用 Let's Encrypt SSL/TLS 证书从 Web 界面安全地连接到该服务器。 或者,您可能希望查看适用于 FreeBSD、Linux、Mac 和 Windows 的 Minio 桌面客户端 ,作为使用和管理对象存储服务器的替代方式。
此外,如果您想将 Minio 安装的存储容量增加到服务器磁盘大小之外,您可以使用 DigitalOcean 的块存储服务 将卷附加到您的服务器,将存储容量扩展多达 80 TB以旋转相同大小的液滴的一小部分成本。