如何在 Ubuntu 18.04 上使用 Minio 设置对象存储服务器

作者选择了 开放式互联网 / 自由言论基金作为 写给捐赠计划的一部分接受捐款。

介绍

从基于云的备份解决方案到高可用性(CDN)网络(LINK0),存储非结构化对象数据块并通过HTTP API(称为_object storage_)(LINK1)使其可访问的能力,已成为现代技术景观的组成部分。

Minio是一个流行的开源对象存储服务器,与 Amazon S3 云存储服务兼容。已配置到与 Amazon S3 交谈的应用程序也可以配置到与 Minio 交谈,使 Minio 成为 S3 的可行的替代方案,如果你想要对你的对象存储服务器进行更多的控制。该服务存储非结构化数据,如照片,视频,日志文件,备份和容器/VM 图像,甚至可以提供一个单一的对象存储服务器,可以聚集跨多个服务器分布的多个驱动器。

Minio 是用 Go 编写的,配备了命令行客户端以及浏览器界面,并支持简单的排队服务,用于 Advanced Message Queuing Protocol (AMQP), Elasticsearch, Redis, NATS,和 PostgreSQL的目标。

在本教程中,你将:

  • 在 Ubuntu 18.04 服务器上安装 Minio 服务器,并将其配置为 systemd 服务
  • 使用 Let's Encrypt设置 SSL/TLS 证书,以确保服务器和客户端之间的通信。

前提条件

要完成本教程,您将需要:

  • 一个Ubuntu 18.04服务器设置通过遵循 我们的Ubuntu 18.04初始服务器设置教程,包括一个 sudo非根用户和防火墙。
  • 一个完全注册的域名. 你可以购买一个在 Namecheap或获得一个免费在 Freenom 。 在本教程中,你的域名将被代表为 your_domain.
  • 以下的 DNS 记录设置为你的 Minio 服务器. 你可以遵循 我们的 DNS 记录文档 有关如何为一个 DigitalOcean Droplet 添加它们的详细信息。
  • 一个记录你的服务器的名称(例如 `minio

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

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

在此步骤中,您将通过预编译的二进制来安装服务器,然后配置 Minio 服务器。

首先,登录您的服务器,用您的用户名替换sammyyour_server_ip以您的 Ubuntu 18.04 服务器的 IP 地址:

1[environment local]
2ssh sammy@your_server_ip

如果您最近没有更新包数据库,请现在更新它:

1sudo apt update

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

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

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

 1[secondary_label Output]
 2--2019-08-27 15:08:49--  https://dl.min.io/server/minio/release/linux-amd64/minio
 3Resolving dl.min.io (dl.min.io)... 178.128.69.202
 4Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected.
 5HTTP request sent, awaiting response... 200 OK
 6Length: 44511616 (42M) [application/octet-stream]
 7Saving to: ‘minio’
 8
 9minio 100%[===================>]  42.45M 21.9MB/s in 1.9s
10
112019-08-27 15:08:51 (21.9 MB/s) - ‘minio’ saved [44511616/44511616]

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

1sudo chmod +x minio

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

1sudo mv minio /usr/local/bin

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

出于安全原因,最好避免将 Minio 服务器运行为 root. 这将限制在被破坏的情况下对您的系统造成的损害。由于您在步骤 2 中使用的systemd脚本会寻找一个名为minio-user的用户帐户和组,请以此名称创建一个新的用户:

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

在这个命令中,你用s旗设置了/sbin/nologin作为mini-user的壳,这是一个不允许用户登录的壳,而mini-user不需要这个壳。

接下来,将 Minio 二进制的所有权更改为迷你用户:

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

接下来,你会创建一个目录,在那里Minio将存储文件。这将是 _buckets_的存储位置,你会用它来组织你在Minio服务器上存储的对象。

1sudo mkdir /usr/local/share/minio

将该目录的所有权授予小用户:

1sudo chown minio-user:minio-user /usr/local/share/minio

大多数服务器配置文件存储在/etc目录中,所以在那里创建您的Minio配置文件:

1sudo mkdir /etc/minio

将该目录的所有权交给小用户:

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

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

1sudo nano /etc/default/minio

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

1[label /etc/default/minio]
2MINIO_ACCESS_KEY="minio"
3MINIO_VOLUMES="/usr/local/share/minio/"
4MINIO_OPTS="-C /etc/minio --address your_server_ip:9000"
5MINIO_SECRET_KEY="miniostorage"

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

  • MINIO_ACCESS_KEY: 此设置了您将使用的访问密钥,以访问 Minio 浏览器的用户界面。
  • MINIO_SECRET_KEY: 此设置了您将使用的私钥,以完成您的登录凭证到 Minio 界面。 本教程已将值设置为 miniostorage,但我们建议选择不同的,更复杂的密码来保护您的服务器。
  • MINIO_VOLUMES: 这识别了您为您的桶创建的存储目录。
  • MINIO_OPTS: 这改变了服务器服务数据的位置和方式。 C旗帜指向 Minio 使用的配置目录,而 -地址旗帜告诉

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

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

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

在此步骤中,您将配置Minio服务器作为systemd服务来管理。

首先,请使用以下命令下载官方的 Minio service descriptor file:

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

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

1[secondary_label Output]
2
3  % Total    % Received % Xferd Average Speed Time Time Time Current
4                                 Dload Upload Total Spent Left Speed
5100 835 100 835 0 0 6139 0 --:--:-- --:--:-- --:--:--  6139

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

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

1nano minio.service

这将显示如下:

 1[label /etc/systemd/system/minio.service]
 2[Unit]
 3Description=MinIO
 4Documentation=https://docs.min.io
 5Wants=network-online.target
 6After=network-online.target
 7AssertFileIsExecutable=/usr/local/bin/minio
 8
 9[Service]
10WorkingDirectory=/usr/local/
11
12User=minio-user
13Group=minio-user
14
15EnvironmentFile=/etc/default/minio
16ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
17
18ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
19
20# Let systemd restart this service always
21Restart=always
22
23# Specifies the maximum file descriptor number that can be opened by this process
24LimitNOFILE=65536
25
26# Disable timeout logic and wait until process is stopped
27TimeoutStopSec=infinity
28SendSIGKILL=no
29
30[Install]
31WantedBy=multi-user.target
32
33# Built for ${project.name}-${project.version} (${project.name})

此服务单元文件将使用您之前创建的小用户用户启动 Minio 服务器,还会实现您在最后一步中设置的环境变量,并使服务器在启动时自动运行。

一旦你查看了脚本的内容,关闭你的文本编辑器。

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

1sudo mv minio.service /etc/systemd/system

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

1sudo systemctl daemon-reload

最后,允许Minio在启动时启动:

1sudo systemctl enable minio

这将产生以下产出:

1[secondary_label Output]
2Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

现在系统d脚本已安装和配置,是时候启动服务器了。

步骤 3 — 启动 Minio 服务器

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

首先,启动 Minio 服务器:

1sudo systemctl start minio

接下来,通过运行此命令来验证 Minio 的状态、它所关联的 IP 地址、其内存使用率等等:

1sudo systemctl status minio

你会得到以下的输出:

 1[secondary_label Output]
 2 minio.service - MinIO
 3   Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
 4   Active: active (running) since Mon 2019-12-09 21:54:02 UTC; 46s ago
 5     Docs: https://docs.min.io
 6  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
 7 Main PID: 3407 (minio)
 8    Tasks: 7 (limit: 1152)
 9   CGroup: /system.slice/minio.service
10           └─3407 /usr/local/bin/minio server -C /etc/minio --address your_server_IP:9000 /usr/local/share/minio/
11
12Dec 09 21:54:02 cart-Minion-Object-1804-1 systemd[1]: Started MinIO.
13Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Endpoint:  http://your_server_IP:9000
14Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Browser Access:
15Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]:    http://your_server_IP:9000
16...

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

首先添加规则:

1sudo ufw allow 9000

然后,启用防火墙:

1sudo ufw enable

你会得到以下快速:

1[secondary_label Output]
2Command may disrupt existing ssh connections. Proceed with operation (y|n)?

点击yENTER来确认这一点,您将收到以下输出:

1[secondary_label Output]
2Firewall is active and enabled on system startup

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

步骤 4 —通过TLS证书确保访问您的Minio服务器

在此步骤中,您将使用从证书机构(CA)获得的私钥和公共证书来确保访问您的Minio服务器,在这种情况下 Let's Encrypt

首先,允许通过您的防火墙访问 HTTP 和 HTTPS。

1sudo ufw allow 80

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

1sudo ufw allow 443

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

1sudo ufw status verbose

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

 1[secondary_label Output]
 2Status: active
 3Logging: on (low)
 4Default: deny (incoming), allow (outgoing), disabled (routed)
 5New profiles: skip
 6
 7To Action From
 8--                         ------      ----
 922/tcp (OpenSSH)           ALLOW IN Anywhere
109000 ALLOW IN Anywhere
11443 ALLOW IN Anywhere
1280 ALLOW IN Anywhere
1322/tcp (OpenSSH (v6))      ALLOW IN Anywhere (v6)
149000 (v6)                  ALLOW IN Anywhere (v6)
15443 (v6)                   ALLOW IN Anywhere (v6)
1680 (v6)                    ALLOW IN Anywhere (v6)

这确认端口80443是开放的,确保您的服务器接受来自互联网的请求。

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

要准备添加 PPA 存储库,先安装 software-properties-common,用于管理 PPA 的包:

1sudo apt install software-properties-common

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

现在,添加 Universe 存储库:

1sudo add-apt-repository universe

该库包含由Ubuntu社区维护的自由和开源软件,但不是Canonical(https://canonical.com/),Ubuntu的开发者正式维护的。

接下来,添加 Certbot 存储库:

1sudo add-apt-repository ppa:certbot/certbot

您将获得以下输出:

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

点击进入来接受。

然后更新包列表:

1sudo apt update

最后,安装certbot:

1sudo apt install certbot

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

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

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

--standalone 表示此证书适用于内置的 standalone 网页服务器. 有关此事的更多信息,请参阅我们的 [如何使用 Certbot 独立模式来检索 Ubuntu 18.04 上的 Let's Encrypt SSL 证书] 教程。

您将获得以下输出:

1[secondary_label Output]
2Saving debug log to /var/log/letsencrypt/letsencrypt.log
3Plugins selected: Authenticator standalone, Installer None
4Enter email address (used for urgent renewal and security notices) (Enter 'c' to
5cancel):

添加您的电子邮件并按进入

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

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

输入A并按ENTER来同意。

接下来,您将被问及是否愿意与电子边境基金会(https://www.eff.org/)共享您的电子邮件:

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

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

接下来,将这两个文件(privkey.pemfullchain.pem)复制到 Minio 服务器配置文件夹中的 certs 目录中,该文件为 `/etc/minio' 用于本教程。

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

然后对fullchain.pem做同样的事情,将结果命名为public.crt:

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

现在,将文件的所有权更改为小用户。首先,为private.key做以下操作:

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

然后是public.crt:

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

重新启动Minio服务器,以便它意识到证书并开始使用HTTPS:

1sudo systemctl restart minio

Let’s Encrypt 证书仅有效 90 天,旨在鼓励用户自动更新证书过程. 您安装的 Certbot 包会自动将更新脚本添加到 /etc/cron.d

有了这个,Minio的连接现在是安全的,SSL/TLS证书将自动为您更新,在下一步,您将通过浏览器连接到Minio来使用服务器。

步骤 5 — 使用 HTTPS 安全连接到 Minio 的 Web 接口

在此步骤中,您将通过 HTTPS 安全地连接到 Minio 网络接口,然后创建桶并上传对象。

访问 Web 界面,将您的浏览器指向 https://minio-server.your_domain:9000

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

Minio login screen

现在,通过输入您的凭据登录到主界面。对于 Access Key,请在 Step 1中输入您在/etc/default/minio环境文件中设置的MINIO_ACCESS_KEY。对于 Secret Key,请在同一文件中输入的MINIO_SECRET_KEY

然后您将被介绍到 Minio 用户界面. 要创建一个新的桶,您可以存储对象,点击主界面右下方的红色 + 按钮,以添加两个额外的黄色按钮。

Minio's main interface

点击中间的黄色按钮,在提示中输入你的新桶的名称,按ENTER键来保存你的回复。

<$>[注] **注:**在命名您的 Minio 桶时,请确保您的名字只包含小写字母、数字或字母。

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

此时,您已经通过创建桶和上传对象的整个基本 Web 界面工作。

结论

您现在有自己的 Minio 对象存储服务器,您可以通过使用 Let's Encrypt SSL/TLS 证书从 Web 界面安全地连接到它。

此外,如果您想将 Minio 安装的存储容量超过服务器的磁盘大小,您可以使用 DigitalOcean 的区块存储服务将音量附加到您的服务器上,将存储容量扩展到 80 TB。

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

Published At
Categories with 技术
comments powered by Disqus