如何在 Ubuntu 20.04 上使用 Minio 安装和配置 S3 兼容对象存储服务器
在此页
- 先决条件
- 第 1 步 - 安装 Minio 服务器
- 第 2 步 - 准备对象存储磁盘
- 第 3 步 - 配置 Minio
- 第 4 步 - 安装 Minio 服务
- 第 5 步 - 启动 Minio 服务器
- 第 6 步 - 使用 SSL 保护 Minio
- 第 7 步 - 连接到 Minio 并设置存储桶
- 第 8 步 - 安装 Minio 客户端并访问文件
- 结论
对象存储是使用 HTTP API 存储和检索非结构化数据块和元数据。我们不是通过使用文件系统将文件分成块以存储在磁盘上来以传统方式存储文件,而是处理通过网络存储的整个对象。这些对象可以是图像、视频、日志、HTML 文件、备份、容器图像或任何独立的字节块。它们是非结构化的,因为它们不遵循任何特定的模式或格式。
Minio 是一种流行的开源、自托管、兼容 Amazon S3 的对象存储服务器。 Minio 是用 Go 编写的,带有独立于操作系统的客户端和浏览器界面。在本教程中,您将在 Ubuntu 20.04 服务器上安装 Minio 服务器,使用来自 Lets Encrypt 的 SSL 证书保护它,并使用命令行客户端访问它。
先决条件
- An Ubuntu 20.04 server with a non-root user with sudo privileges.
- A fully registered domain name,
minio.example.com
. - An Ubuntu 20.04 machine to act as a client.
-
The system is updated.
$ sudo apt update
-
Few packages that your system needs.
$ sudo apt install wget curl nano ufw software-properties-common apt-transport-https ca-certificates -y
Some of these packages may already be installed on your system.
第 1 步 - 安装 Minio 服务器
Minio 是用 Go 编写的,作为一个简单的二进制文件发布。从Minios官网下载二进制文件。
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
使文件可执行。
$ chmod +x minio
将二进制文件移动到 /usr/local/bin
目录。
$ sudo mv minio /usr/local/bin
验证安装。
$ minio --version
minio version RELEASE.2022-01-28T02-28-16Z
第 2 步 - 准备对象存储磁盘
我们需要准备一个专用的块设备来存储对象。存储路径可以在您的磁盘上或连接到您的服务器的第二个磁盘上。对于我们的教程,我们使用辅助磁盘。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
??sda1 8:1 0 50G 0 part /
sdb 8:16 0 50G 0 disk
安装 parted
应用程序来创建和修改磁盘分区。
$ sudo apt install parted
执行以下命令将副盘挂载到/data
目录。
$ sudo parted -s -a optimal -- /dev/sdb mklabel gpt
$ sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
$ sudo parted -s -- /dev/sdb align-check optimal 1
$ sudo mkfs.ext4 /dev/sdb1
$ echo "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
$ sudo mkdir /data
$ sudo mount -a
第 3 步 - 配置 Minio
Minio 服务器不应该以 root 身份运行以防止任何损坏。因此,我们将创建一个名为 minio-user
的用户和组。
$ sudo useradd -r minio-user -s /sbin/nologin
-s
标志将用户帐户的 shell 设置为 /sbin/nologin
,这不允许用户登录。
更改 Minio 二进制文件的所有权。
$ sudo chown minio-user:minio-user /usr/local/bin/minio
将 /data
目录的所有权授予 minio-user
。
$ sudo chown minio-user:minio-user /data -R
下一步是为 Minio 创建一个配置文件。创建一个目录来存放配置文件。
$ sudo mkdir /etc/minio
将目录的所有权授予 minio-user
用户。
$ sudo chown minio-user:minio-user /etc/minio
创建环境文件以存储默认配置。此文件将存储在 /etc/default
目录中。
$ sudo nano /etc/default/minio
粘贴以下带有环境变量的代码来定义 Minio。
MINIO_ROOT_USER="minio"
MINIO_VOLUMES="/data"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000 --console-address :9001"
MINIO_ROOT_PASSWORD="miniostorage"
让我们检查所有变量以及它们的作用。
- MINIO_ROOT_USER:设置访问密钥/用户以访问 Minio 用户界面。它的长度至少应为 3 个字符。
- MINIO_VOLUMES:指定数据的存储目录。
- MINIO_OPTS:为 Minio 服务器设置各种选项。
-C
标志指定了之前创建的配置目录。--address
标志指定要绑定到的 IP 地址和端口。如果你不指定 IP 地址,Minio 将绑定到服务器上的每个 IP 地址,包括本地主机或任何与 Docker 相关的 IP 地址。默认端口为 9000。--console-address
标志为 Minio 的 Web 控制台设置端口 9001。 - MINIO_ROOT_PASSWORD:设置访问Minio界面的私钥/密码。它的长度至少应为 8 个字符。选择一个强大而复杂的密钥。
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
第 4 步 - 安装 Minio 服务
从官方 Github 存储库下载 Minio 服务文件。
$ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
使用 Nano 编辑器打开文件。
$ nano 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
ProtectProc=invisible
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=1048576
# Specifies the maximum number of threads this process can create
TasksMax=infinity
# 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。它使用 /etc/default/minio
作为我们在步骤 3 中配置的环境文件。一旦满意,按 Ctrl + X 关闭文件并在出现提示时输入 Y。
将服务文件移动到 /etc/systemd/system
目录。
$ sudo mv minio.service /etc/systemd/system
重新加载服务守护进程。
$ sudo systemctl daemon-reload
启用 Minio 服务。
$ sudo systemctl enable minio
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.
第 5 步 - 启动 Minio 服务器
启动 Minio 服务器。
$ sudo systemctl start minio
验证状态。
$ sudo systemctl status minio
? minio.service - MinIO
Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-02-01 13:30:44 UTC; 5s ago
Docs: https://docs.min.io
Process: 26068 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exi>
Main PID: 26076 (minio)
Tasks: 6
Memory: 55.3M
CGroup: /system.slice/minio.service
??26076 /usr/local/bin/minio server -C /etc/minio --address 209.208.26.129:9000 --console-address :9001 /data
使用简单防火墙 (UFW) 允许端口 9000 和 9001。
$ sudo ufw allow 9000
$ sudo ufw allow 9001
启用防火墙。
$ sudo ufw enable
在浏览器中打开 URL http://your_server_ip:9001
,您将看到以下屏幕。

第 6 步 - 使用 SSL 保护 Minio
我们将使用 Lets Encrypt 来保护 Minio。要获得免费的 SSL 证书,我们需要下载 Certbot 工具。为此,我们将使用 Snapd 包安装程序。
安装快照安装程序。
$ sudo apt install snapd
确保您的 Snapd 版本是最新的。
$ sudo snap install core
$ sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令通过创建指向 /usr/bin
目录的符号链接来确保 Certbot 命令运行。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d minio.example.com
上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/minio.example.com
目录。
将文件privkey.pem
和fullchain.pem
复制到Minios配置文件夹下的certs
目录中。
$ sudo cp /etc/letsencrypt/live/minio.example.com/privkey.pem /etc/minio/certs/private.key
$ sudo cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /etc/minio/certs/public.crt
更改复制证书的所有权。
$ sudo chown minio-user:minio-user /etc/minio/certs/private.key
$ sudo chown minio-user:minio-user /etc/minio/certs/public.crt
允许 HTTP 和 HTTPS 端口通过防火墙。
$ sudo ufw allow 80
$ sudo ufw allow 443
打开 Minio 配置文件。
$ sudo nano /etc/default/minio
在底部添加以下行。
MINIO_SERVER_URL="https://minio.example.com:9000"
即使通过端口 9001 访问控制台,SSL 服务器 URL 使用端口 9000 访问 Minio API。
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重启 Minio 服务器。
$ sudo systemctl restart minio
您可以在浏览器中通过 URL https://minio.example.com:9001
访问 Minio 控制台。
第 7 步 - 连接到 Minio 并设置存储桶
使用之前设置的用户名和密码登录Minio Console,访问Minio Dashboard。

单击创建存储桶按钮创建您的第一个存储桶。

由于我们在单个服务器/磁盘上安装 Minio,因此某些功能被禁用。输入存储桶的名称,然后单击“创建存储桶”按钮继续。完成后您将看到以下屏幕。

要上传文件,请单击“浏览”按钮,将出现以下页面。

单击上传文件按钮并再次选择上传文件以在您的 PC 上打开文件浏览器。您可以一次选择多个文件进行上传。

完成后单击回收站按钮清除上传队列。

现在就这些了。您已经创建了第一个存储桶并上传了一些文件。接下来,我们将使用客户端连接到服务器,访问这个存储桶。并管理它。
第 8 步 - 安装 Minio 客户端并访问文件
为了我们的目的,我们将在另一台基于 Ubuntu 20.04 的机器上安装 Minios 命令行客户端。您也可以从 Minios 官方下载页面下载桌面客户端。
下载官方 Minio 二进制文件。
$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
使二进制文件可执行。
$ chmod +x mc
将二进制文件移动到 /usr/local/bin
目录。
$ sudo mv mc /usr/local/bin
验证安装。
$ mc --version
mc version RELEASE.2022-02-02T02-03-24Z
为您的 Minio 服务器设置别名,以便您可以使用易于识别的名称访问它。将 minio
和 miniostorage
替换为您为服务器选择的用户名和密码。
$ mc alias set howtoforge https://minio.example.com:9000 minio miniostorage
mc: Configuration written to `/home/<user>/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/<user>/.mc/share`.
mc: Initialized share uploads `/home/<user>/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/<user>/.mc/share/downloads.json` file.
Added `howtoforge` successfully.
Minio客户端将所有配置存放在/home/user/.mc
目录下。
获取Minio服务器信息。为此,我们使用 admin
子命令。
$ mc admin info howtoforge
? minio.example.com:9000
Uptime: 2 minutes
Version: 2022-01-28T02:28:16Z
Network: 1/1 OK
9.6 MiB Used, 1 Bucket, 5 Objects
要列出您的 Minio 服务器下的所有存储桶,请使用以下命令。
$ mc ls howtoforge
[2022-02-01 16:59:46 UTC] 0B howtoforge/
要列出给定存储桶中的所有对象/文件,请使用以下命令。
$ mc ls howtoforge/howtoforge
[2022-02-02 05:32:28 UTC] 2.9MiB STANDARD IMG_20160717_184947_HDR.jpg
[2022-02-02 05:32:00 UTC] 2.2MiB STANDARD IMG_20160903_220639_HDR.jpg
[2022-02-02 05:28:25 UTC] 2.4MiB STANDARD IMG_20161006_213936_HDR.jpg
[2022-02-02 05:28:07 UTC] 2.2MiB STANDARD IMG_20161015_194409_HDR.jpg
[2022-02-02 03:33:28 UTC] 25KiB STANDARD quarantine.jpg
您可以使用以下命令创建新存储桶。
$ mc mb howtoforge/bucket2
Bucket created successfully `howtoforge/bucket2`.
让我们创建一个要复制到此存储桶的新文件。
$ touch test.txt
要将文件复制到新创建的存储桶,请使用以下命令。
$ mc cp test.txt howtoforge/bucket2
/home/nspeaks/test.txt: 0 B / ? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????
列出新复制的文件。
$ mc ls howtoforge/bucket2
[2022-02-02 07:06:44 UTC] 0B STANDARD test.txt
您可以使用 --help
参数检查所有命令。
$ mc --help
NAME:
mc - MinIO Client for cloud storage and filesystems.
USAGE:
mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]
COMMANDS:
alias set, remove and list aliases in configuration file
ls list buckets and objects
mb make a bucket
rb remove a bucket
cp copy objects
mirror synchronize object(s) to a remote site
cat display object contents
head display first 'n' lines of an object
pipe stream STDIN to an object
share generate URL for temporary access to an object
find search for objects
sql run sql queries on objects
stat show object metadata
mv move objects
tree list buckets and objects in a tree format
du summarize disk usage recursively
retention set retention for object(s)
legalhold manage legal hold for object(s)
diff list differences in object name, size, and date between two buckets
rm remove object(s)
version manage bucket versioning
ilm manage bucket lifecycle
encrypt manage bucket encryption config
event manage object notifications
watch listen for object notification events
undo undo PUT/DELETE operations
anonymous manage anonymous access to buckets and objects
tag manage tags for bucket and object(s)
replicate configure server side bucket replication
admin manage MinIO servers
update update mc to latest release
support Support related commands
GLOBAL FLAGS:
--autocompletion install auto-completion for your shell
--config-dir value, -C value path to configuration folder (default: "/home/<user>/.mc")
--quiet, -q disable progress bar display
--no-color disable color theme
--json enable JSON lines formatted output
--debug enable debug output
--insecure disable SSL certificate verification
--help, -h show help
--version, -v print the version
TIP:
Use 'mc --autocompletion' to enable shell autocompletion
VERSION:
RELEASE.2022-02-02T02-03-24Z
结论
我们的教程到此结束,您在基于 Ubuntu 20.04 的服务器上安装了 Minio 对象存储服务器。它可以通过受 Lets Encrypt SSL 证书保护的 Web 控制台访问。您还在另一台 Ubuntu 机器上安装了 Minio 命令行客户端来管理和访问 Minio 服务器。
如果您有任何问题,请在下面的评论中发表。