如何在Ubuntu18.04上使用Minio设置对象存储服务器

来自菜鸟教程
跳转至:导航、​搜索

作为 Write for DOnations 计划的一部分,作者选择了 Open Internet/Free Speech Fund 来接受捐赠。

介绍

从基于云的备份解决方案到高可用性 内容交付网络 (CDN) ,存储非结构化对象数据块并通过 HTTP API 访问它们的能力,称为 对象存储 , 已成为现代科技领域不可或缺的一部分。

Minio是一款流行的开源对象存储服务器,兼容Amazon S3云存储服务。 已配置为与 Amazon S3 通信的应用程序也可以配置为与 Minio 通信,如果您希望对对象存储服务器进行更多控制,Minio 可以成为 S3 的可行替代方案。 该服务存储非结构化数据,例如照片、视频、日志文件、备份和容器/VM 映像,甚至可以提供单个对象存储服务器,将分布在许多服务器上的多个驱动器汇集在一起。

Minio 用 Go 编写,自带命令行客户端和浏览器界面,支持 Advanced Message Queuing Protocol (AMQP), Elasticsearch, Redis[ X207X]、NATS 和 PostgreSQL 目标。 由于所有这些原因,学习设置 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 update

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

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

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

Output--2019-08-27 15:08:49--  https://dl.min.io/server/minio/release/linux-amd64/minio
Resolving dl.min.io (dl.min.io)... 178.128.69.202
Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 44511616 (42M) [application/octet-stream]
Saving to: ‘minio’

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

2019-08-27 15:08:51 (21.9 MB/s) - ‘minio’ saved [44511616/44511616]

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

sudo chmod +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,minio-user 不需要它。

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

sudo chown minio-user:minio-user /usr/local/bin/minio

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

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_ACCESS_KEY="minio"
MINIO_VOLUMES="/usr/local/share/minio/"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000"
MINIO_SECRET_KEY="miniostorage"

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

  • 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服务描述符文件:

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

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

Output
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   835  100   835    0     0   6139      0 --:--:-- --:--:-- --:--:--  6139

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

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

nano minio.service

这将显示以下内容:

/etc/systemd/system/minio.service

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user

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

ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

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

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

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

sudo mv minio.service /etc/systemd/system

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

sudo systemctl daemon-reload

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

sudo systemctl enable minio

这将给出以下输出:

OutputCreated symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

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

第 3 步 — 启动 Minio 服务器

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

首先,启动 Minio 服务器:

sudo systemctl start minio

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

sudo systemctl status minio

您将获得以下输出:

Output● minio.service - MinIO
   Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-12-09 21:54:02 UTC; 46s ago
     Docs: https://docs.min.io
  Process: 3405 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi (code=exited, status=0/SUCCES
 Main PID: 3407 (minio)
    Tasks: 7 (limit: 1152)
   CGroup: /system.slice/minio.service
           └─3407 /usr/local/bin/minio server -C /etc/minio --address your_server_IP:9000 /usr/local/share/minio/

Dec 09 21:54:02 cart-Minion-Object-1804-1 systemd[1]: Started MinIO.
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Endpoint:  http://your_server_IP:9000
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Browser Access:
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]:    http://your_server_IP:9000
...

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

首先添加规则:

sudo ufw allow 9000

然后,启用防火墙:

sudo ufw enable

您将收到以下提示:

OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)?

按 y 和 ENTER 确认。 然后,您将获得以下输出:

OutputFirewall is active and enabled on system startup

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

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

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

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

sudo ufw allow 80

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

sudo ufw allow 443

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

sudo ufw status verbose

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

OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
9000                       ALLOW IN    Anywhere
443                        ALLOW IN    Anywhere
80                         ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
9000 (v6)                  ALLOW IN    Anywhere (v6)
443 (v6)                   ALLOW IN    Anywhere (v6)
80 (v6)                    ALLOW IN    Anywhere (v6)

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

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

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

sudo apt install software-properties-common

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

现在添加 Universe 存储库:

sudo add-apt-repository universe

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

接下来,添加 Certbot 存储库:

sudo add-apt-repository ppa:certbot/certbot

您将收到以下输出:

OutputThis is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or ctrl-c to cancel adding it

按 ENTER 接受。

然后更新包列表:

sudo apt update

最后,安装certbot:

sudo apt install certbot

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

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

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

--standalone 表示此证书适用于内置的 独立 Web 服务器。 有关这方面的更多信息,请参阅我们的 如何使用 Certbot 独立模式检索让我们在 Ubuntu 18.04 上加密 SSL 证书教程。

您将收到以下输出:

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

添加您的电子邮件并按 ENTER。

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

Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:

输入 A 并按 ENTER 同意。

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

Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

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

接下来,将这两个文件(privkey.pem 和 fullchain.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 restart 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 服务器登录屏幕:

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

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

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

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


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

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

结论

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

此外,如果您想将 Minio 安装的存储容量增加到服务器磁盘大小之外,您可以使用 DigitalOcean 的块存储服务 将卷附加到您的服务器,将存储容量扩展多达 80 TB .

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