前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。
介绍
从基于云的备份解决方案到高可用性内容交付网络 (CDN),存储非结构化对象数据 blob 并使其可通过 HTTP API 访问的能力(称为对象存储)已成为现代技术领域不可或缺的一部分。
Minio是一款流行的开源对象存储服务器,与Amazon S3云存储服务兼容。已配置为与 Amazon S3 通信的应用程序也可以配置为与 Minio 通信,如果希望对对象存储服务器进行更多控制,则 Minio 可以成为 S3 的可行替代方案。该服务存储非结构化数据,例如照片、视频、日志文件、备份和容器/虚拟机映像,甚至可以提供单个对象存储服务器,该服务器可以池化分布在许多服务器上的多个驱动器。
Minio 用 Go 编写,附带命令行客户端和浏览器界面,并支持高级消息队列协议 (AMQP)、Elasticsearch、Redis、NATS和PostgreSQL目标的简单队列服务。学习设置 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_ip
Ubuntu 18.04 服务器的 IP 地址:
bash
ssh sammy@your_server_ip
更新软件包数据库:
bash
sudo apt update
接下来,从官网下载Minio服务器的二进制文件:
bash
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
的文件。使用以下命令使其可执行:
bash
sudo chmod +x minio
现在,将文件移动到/usr/local/bin
Minio 的systemd
启动脚本期望找到它的目录中:
bash
sudo mv minio /usr/local/bin
出于安全原因,最好避免以root 身份 运行 Minio 服务器。如果受到威胁,这将限制对系统造成的损害。由于将在步骤 2 中使用的脚本会查找名为 systemd
的用户帐户和组minio-user
,因此请使用此名称创建一个新用户:
bash
sudo useradd -r minio-user -s /sbin/nologin
在此命令中,使用-s
标志设置/sbin/nologin
为 minio-user
的 shell。
接下来,将 Minio 二进制文件的所有权更改为minio-user
:
bash
sudo chown minio-user:minio-user /usr/local/bin/minio
下来创建一个 Minio 存储文件的目录。这将是存储桶 的存储位置,稍后将使用它来组织存储在 Minio 服务器上的对象。本教程为目录minio
:
bash
sudo mkdir /usr/local/share/minio
将该目录的所有权授予minio-user
:
bash
sudo chown minio-user:minio-user /usr/local/share/minio
大多数服务器配置文件都存储在该/etc
目录中,因此请在其中创建 Minio 配置文件:
bash
sudo mkdir /etc/minio
将该目录的所有权minio-user
也授予 :
bash
sudo chown minio-user:minio-user /etc/minio
使用 Nano 或喜欢的文本编辑器创建修改默认配置所需的环境文件:
bash
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 服务描述符文件:
bash
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
要在应用之前审核其内容,请在文本编辑器中打开它以查看其内容:
bash
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
此处:
bash
sudo mv minio.service /etc/systemd/system
然后,运行以下命令重新加载所有 systemd 单元:
bash
sudo systemctl daemon-reload
最后,启用 Minio 开机自启动:
bash
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服务器:
bash
sudo systemctl start minio
接下来,通过运行以下命令来验证 Minio 的状态、其绑定的 IP 地址、内存使用情况等:
bash
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
。
首先添加规则:
bash
sudo ufw allow 9000
然后,启用防火墙:
bash
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) 获取的私钥和公共证书(在本例中为Let's Encrypt )来保护对 Minio 服务器的访问。
首先,允许通过防火墙进行 HTTP 和 HTTPS 访问。为此,请打开 port 80
,这是 HTTP 的端口:
bash
sudo ufw allow 80
接下来,打开443
HTTPS 端口:
bash
sudo ufw allow 443
添加这些规则后,请使用以下命令检查防火墙的状态:
bash
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 的包:
bash
sudo apt install software-properties-common
这个包提供了一些有用的脚本来添加和删除 PPA,而不是手动执行。
现在添加Universe存储库:
bash
sudo add-apt-repository universe
该存储库包含由 Ubuntu 社区维护的免费开源软件,但并非由Ubuntu 开发者Canonical官方维护。在这里找到 Certbot 的存储库。
接下来,添加 Certbot 存储库:
bash
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
接受。
然后更新包列表:
bash
sudo apt update
最后,安装certbot
:
bash
sudo apt install certbot
接下来,将用于certbot
生成新的 SSL 证书。
由于Ubuntu 18.04尚不支持自动安装,因此使用命令certonly
和--standalone
来获取证书:
bash
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:
一旦回答Y
或N
,公钥和私钥将被生成并保存在目录中。/etc/letsencrypt/live/minio-server.your_domain_name
接下来,将这两个文件(privkey.pem
和fullchain.pem
)复制到certs
Minio 的服务器配置文件夹下的目录中,这是/etc/minio
本教程的目录。使用以下命令复制privkey.pem
并重命名文件private.key
:
bash
sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key
然后对 执行相同的操作fullchain.pem
,命名结果public.crt
:
bash
sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/fullchain.pem /etc/minio/certs/public.crt
现在,将文件的所有权更改为minio-user
. 首先,执行以下操作private.key
:
bash
sudo chown minio-user:minio-user /etc/minio/certs/private.key
然后public.crt
:
bash
sudo chown minio-user:minio-user /etc/minio/certs/public.crt
重新启动 Minio 服务器,以便其识别证书并开始使用 HTTPS:
bash
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 服务器登录屏幕: