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

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站

介绍

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

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

Minio 用 Go 编写,附带命令行客户端和浏览器界面,并支持高级消息队列协议 (AMQP)ElasticsearchRedisNATSPostgreSQL目标的简单队列服务。学习设置 Minio 对象存储服务器可以为项目添加广泛的灵活性和实用性。

在教程主要说明:

  • 在 Ubuntu 18.04 服务器上安装 Minio 服务器并将其配置为systemd服务
  • 使用Let’s Encrypt设置 SSL/TLS 证书以保护服务器和客户端之间的通信。
  • 通过HTTPS访问Minio的浏览器界面来使用和管理服务器。

先决条件

要完成本教程,将需要:

  • 一台 Ubuntu 18.04服务器,包括 sudo 非 root 用户和防火墙。
  • 完全注册的域名,或可访问的IP地址。

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

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

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

首先,登录服务器,替换sammy为用户名和your_server_ipUbuntu 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

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

sudo mv minio /usr/local/bin

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

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

在此命令中,使用-s标志设置/sbin/nologinminio-user 的 shell。

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

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

下来创建一个 Minio 存储文件的目录。这将是存储桶的存储位置,稍后将使用它来组织存储在 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 要求单元文件存储在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 服务器的访问。 port 等于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) 获取的私钥和公共证书(在本例中为Let’s Encrypt )来保护对 Minio 服务器的访问。

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

sudo ufw allow 80

接下来,打开443HTTPS 端口:

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 服务器。

将收到以下输出:

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以同意。

接下来,系统会询问您是否愿意与电子前沿基金会分享电子邮件:

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)复制到certsMinio 的服务器配置文件夹下的目录中,这是/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 界面,然后创建存储桶并将对象上传到其中。

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

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

Minio 登录屏幕