如何在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 地址。
- 带有您的服务器名称的 A 记录(例如
第 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 的更多信息,请访问 项目的文档网站 。 如果您想了解有关对象存储的更多信息,请浏览我们的 对象存储教程 。