如何在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]、NATSPostgreSQL 目标。 由于所有这些原因,学习设置 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)?

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

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)

这确认端口 80443 已打开,确保您的服务器接受来自 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:

一旦您回答YN,您的公钥和私钥将被生成并保存在/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 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 的更多信息,请访问 项目的文档网站 。 如果您想了解有关对象存储的更多信息,请浏览我们的 对象存储教程