如何在Ubuntu 20.04上以独立模式设置MinIO对象存储服务器

249 阅读10分钟

*作者选择了[自由和开源基金](www.brightfunds.org/funds/foss-… for DOnations](do.co/w4do-cta)计划…* ###简介 存储非结构化的大块对象数据并使其能够通过HTTP API访问的能力,被称为[*对象存储*](www.digitalocean.com/community/t…](www.digitalocean.com/community/t…](min.io/)是一个开源的对象存储… S3云存储服务。被配置为与亚马逊S3对接的应用程序也可以被配置为与MinIO对接,这意味着你可以将MinIO作为S3的一个可行的替代方案,对你的对象存储服务器进行更多控制。该服务存储非结构化数据,如照片、视频、日志文件、备份和容器/VM图像,可以提供一个单一的对象存储服务器,汇集分布在许多服务器上的多个驱动器。 用[Go](go.dev/),MinIO带有一个… MinIO可以以[独立模式](docs.min.io/minio/barem…](docs.min.io/docs/distri… 在本教程中,你将通过以下方式建立MinIO的独立部署: - 在运行Ubuntu 20.04的服务器上安装MinIO服务器 - 在你的个人电脑上安装MinIO客户端并配置它与MinIO服务器通信 - 设置数字证书以保证服务器和客户端之间的通信,包括通过MinIO控制台。 ## 先决条件 要完成本教程,你需要: * 一台Ubuntu 20.04服务器,包括一个sudo非root用户和一个防火墙。你可以按照[这个Ubuntu 20.04初始服务器设置](www.digitalocean.com/community/t… * 一个注册的域名。本教程中使用`example.com`。你可以在[Namecheap](www.namecheap.com/)上购买一个域名,在\…](www.freenom.com/en/index.ht… * 你的服务器的以下两个DNS记录。按照[DNS Quickstart](docs.digitalocean.com/products/ne… * A记录中的`example.com`指向你的服务器的公共IP地址。 * A记录中的`www.example.com`也指向你的服务器的公共IP地址。 ## 步骤1 - 下载和安装MinIO服务器 MinIO服务器可以通过二进制文件或`.deb`包来安装。在这一步,你将使用`.deb`包进行安装。 首先,登录你的服务器:``command ssh<^>sammy<^>@<^>your-server-ip<^>``更新软件包数据库:``command sudo apt update ``然后,更新系统:``command sudo apt upgrade ``用`y`确认安装。 在升级过程中,你可能在终端收到一个屏幕(见下图),要求你输入关于OpenSSH服务器的配置文件。由于不希望你对配置文件所做的修改被覆盖,所以按`Enter`接受红色显示的默认选项("保持当前安装的本地版本")。 ![Ubuntu 20.04软件包升级提示](assets.digitalocean.com/articles/68…) 接下来,从[MinIO下载页面](min.io/download#/l… ``command wget<^><^>dl.min.io/server/mini… `` 一个名为`minio_<^>20220523184511.0.0<^>_amd64.deb`的<^><^>文件<^><^>将被下载到你的工作目录。在下一步,你将创建MinIO服务器运行所需的文件系统对象。 ## 步骤2 - 创建MinIO用户、组、数据目录和环境文件 在这一步,你将设置MinIO服务器的要求。如果本步骤中的任务没有完成,MinIO服务器将不会启动。 首先,创建一个系统组,MinIO服务器将用以下命令运行。 <^><^> 然后,创建MinIO服务器要运行的用户: ``command sudo useradd -M -r -g<^>minio-user<^> <^>minio-user ``` `<^><^> <^><^>M`标志指示命令不要为用户创建一个主目录。`-r`标志创建一个系统用户。`-g`标志将用户分配到它的主组;在这里,该组是先前创建的`minio-user`组。 接下来,用下面的命令创建MinIO将存储所有文件的数据目录: ``command sudo mkdir /mnt/data `` 然后,将数据目录的所有权交给MinIO用户和组: ``command sudo chown<^>minio-user<^>:<^>minio-user<^>/mnt/data `` 最后,用下面的命令来创建和打开MinIO的环境文件。 ``command sudo nano /etc/default/minio ``该文件将保存服务器和控制台所需的变量。 在该文件中添加以下代码,<^><^>用服务器的非root用户更新<^>sammy<^>: `` [label /etc/default/minio] MINIO_VOLUMES="/mnt/data" MINIO_OPTS="--certs-dir /home/<^><^><^>sammy<^>/.minio/certs --console-address :9001" MINIO_ROOT_USER=<^>minioadmin<^>MINIO_ROOT_PASSWORD=<^>minioadmin<^>```MINIO_VOLUMES`变量定义了MinIO的数据目录,而`MINIO_OPTS`变量定义了数字证书的目录,MinIO控制台的监听地址和端口号(所有网络接口和9001端口)。`/home/<^>sammy<^>/.minio/certs`目录还不存在,但你将在步骤4中创建它。 你可以用`MINIO_ROOT_USER`和`MINIO_ROOT_PASSWORD`变量定义MinIO控制台的登录用户和密码。目前这两个变量都设置为`minioadmin`,但你应该用安全的登录凭证来更新用户和密码。 保存并关闭该文件。 在这一步,你设置了你的MinIO用户和其他要求。接下来,你将配置防火墙以允许MinIO流量通过。 ## 第三步 - 设置防火墙以允许MinIO流量 在这一步,你将配置防火墙以允许流量进入访问MinIO服务器和MinIO控制台的端口。以下是与MinIO相关的内容: - `9000`是MinIO服务器默认监听的端口。 - `9001`是访问MinIO控制台的推荐端口。 使用以下命令允许通过防火墙访问这两个端口: ``command sudo ufw allow 9000:9001/tcp ``你会看到以下输出: `` [secondary_label Output] Rule added Rule added (v6) ``现在端口已经准备好了,你可以生成一个自签名的证书,以实现对MinIO服务器的安全访问。 ## 第4步 - 用自签名证书确保对MinIO服务器的访问 在这一步,你将使用`certgen`,一个来自MinIO开发者的Go程序,来生成一个自签名证书。在撰写本文时的最新版本是[版本1.2.0](github.com/minio/certg… ``command wget<^><^><^><^>github.com/minio/certg… ``该命令将把一个名为`certgen_<^>1.2.0<^>_linux_amd64.deb`的<^><^><^><^>文件放到<^><^><^><^><^><^>你的工作目录中。用下面的命令安装它: ``command sudo dpkg -i certgen_<^>1.2.0<^>_linux_amd64.deb ``现在系统中可以使用`certgen`命令,`certgen -h`将输出它的使用信息。 如果你想把域名指向服务器,并希望通过该域名和IP地址来引用MinIO服务器,用下面的命令为MinIO服务器生成一个证书: ``command sudo certgen -host<^>example.com<^>,<^>your-server-ip<^>```如果你只想通过你的服务器的IP地址访问MinIO服务器,用下面的命令为它生成一个证书: ```command sudo certgen -host<^>your-server-ip<^>```如果生成成功,输出应该是这样的: ``` [secondary_label Output] 创建了一个新证书'public.crt', 'private.key'对以下名称有效 - "<^>example.com<^>" - "<^>your-server-ip<^>" ```如果你没有使用域名,你的输出将只列出服务器的IP。 文件`public.crt`和`private.key`应该在你的工作目录中。这些文件需要被移到`/home<^>/sammy<^>/.minio/certs`目录中。由于该目录还不存在,用以下命令创建它,<^><^>用服务器的非root用户代替<^>sammy<^>。 ``command sudo mkdir -p /home<^>/sammy<^>/.minio/certs ``p`选项创建不存在的父目录。 用这个命令移动文件(<^><^>根据需要替换<^>sammy<^>): ``command sudo mv private.key public.crt /home<^>/sammy<^>/.minio/certs ```最后,将这两个文件的所有权交给MinIO用户和组(<^><^>根据需要替换<^>sammy<^>): ```command sudo chown<^>minio-user<^>:<^>minio-user<^>/home<^>/sammy<^>/.minio/certs/private.key sudo chown<^>minio-user<^>:<^>minio-user<^>/home<^>/sammy<^>/.minio/certs/public.crt ````在这一步,你为你的服务器或域名生成一个自签证书。接下来,你将启动MinIO服务器。 ## 第5步 - 启动MinIO服务器 在这一步中,你将用`systemd`服务启动MinIO服务器。 MinIO服务器可以通过`minio`命令或调用其`systemd`启动脚本来启动。然而,当MinIO服务器用 "minio "命令启动时,它将无法在重启后存活。而且,用 "minio "命令启动MinIO服务器会在"/root "下自动创建".minio "文件夹,这在systemd下是不可行的。所以建议通过`systemd`来启动MinIO服务器。 用以下命令启动MinIO服务器: ``command sudo systemctl start minio ``检查状态: ``command sudo systemctl status minio ``输出应该是这样的: `` [secondary_label Output] minio.service - MinIO Loaded: loaded (/etc/systemd/system/minio.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2022-05-23 02:55:03 UTC; 2s ago Docs: docs.min.io Process:21978 ExecStartPre=/bin/bash -c if [ -z "{MINIO\_VOLUMES}" \]; then echo "Variable MINIO\_VOLUMES not set in /etc/default> Main PID: 21989 (minio) Tasks: 7 Memory:49.5M CGroup:/system.slice/minio.service └─21989 /usr/local/bin/minio server --certs-dir /home/finid/.minio/certs --console-address :9001 /mnt/data May 23 02:55:03 minio-buntu systemd\[1\] 。启动MinIO... 五月 23 02:55:03 minio-buntu systemd\[1\]:5月23日 02:55:03 minio-buntu minio\[21989\].启动MinIO。WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you chang> May 23 02:55:03 minio-buntu minio\[21989\]:API:<^><^>https://161.35.115.223:9000https://10.10.0.6:9000<^><^> <^><^>https://10.116.0.3:9000 <^><^> <^><^> <^>https<^>:/> May 23 02:55:03 minio-buntu minio\[21989\]:控制台<^><^>:<^><^>https://161.35.115.223:9001<^><^>https://10.10.0.6:9001 https://10.116.0.3:9001 https:> May 23 02:55:03 minio-buntu minio\[21989\]:文档:https://docs.min.io May 23 02:55:03 minio-buntu minio\[21989\]:Finished loading IAM sub-system (to load data took 0.0s of 0.0s). \`\`\`如果上述输出中的API和Console引用\`https\`,一切都按预期进行。 然而,如果API和Console引用了\`http\`,就出了问题,即使MinIO成功启动。你可能需要使用步骤 4 生成一个新的证书,以便指向 \`https\`;然后重新启动 MinIO 服务。如果证书文件不在正确的目录中,或者 MinIO 用户不拥有这些文件,则可能出现另一个错误来源。MinIO并不总是记录在\`systemd\`日志中,所以如果\`sudo journalctl -u minio\`在排除MinIO的故障时没有显示最新的活动,可以使用\`sudo grep minio /var/log/syslog\`命令来代替。 在这一步,你启动了MinIO服务器。接下来,你将连接到它。 ## 第六步 - 通过MinIO控制台安全连接到MinIO服务器 \[MinIO控制台\](https://docs.min.io/minio/baremetal/console/minio-console.html)是执行管理任务的图形界面,如访问日志监控和服务器配置。在这一步,你将通过这个控制台连接到MinIO服务器。将你的浏览器指向\`https://your-server-ip:9001\`。<>[注意] **注意:**因为没有涉及网络服务器,`<^><^>http://your-server-ip:9001\`不会重定向到\`<^><^>https://your-server-ip:9001\`。始终使用\`<^><^>https://your-server-ip:9001\`来访问你的MinIO控制台。<>因为证书是自签的,你的浏览器将抛出一个类似于此图所示的提示。 !\[浏览器安全异常\](https://assets.digitalocean.com/articles/68195/eiK912n2.png) 如果使用Firefox,点击\*\*高级...\*\*,然后点击\*\*接受风险并继续\*\*。对于其他浏览器,这将是一个类似的过程。 MinIO控制台的登录界面现在将加载:!\[MinIO控制台的登录界面\](https://assets.digitalocean.com/articles/68195/TPusAUf.png) 用步骤2中创建的MinIO环境文件中配置的证书登录。 登录成功后,主界面将像这样加载:!\[MinIO控制台的主界面\](https://assets.digitalocean.com/articles/68195/v4M7DMU.png) 你可以从控制台界面执行管理任务,比如查看日志;创建和管理桶、用户和组;以及其他服务器配置任务。 你现在已经通过图形界面连接到MinIO服务器。在下一步,你将在你的个人电脑上安装和使用MinIO客户端,并使用它连接到MinIO服务器。 ## 第七步 - 在你的本地电脑上安装和使用MinIO客户端 MinIO客户端是MinIO的组件,你在本地电脑上安装并用来管理MinIO服务器。本步骤中的所有命令都将在你本地计算机的命令行中完成。与MinIO服务器一样,客户端可以从二进制文件或\`.deb\`包中安装。在这一步,你将使用".deb "包来安装。 在你本地机器的一个新的终端会话中,从\[MinIO下载页面\](https://min.io/download#/linux)下载最新的MinIO客户端\`.deb\`包: \`\`command wget<^><^>https://dl.min.io/client/mc/release/linux-amd64/mcli\_20220509040826.0.0\_amd64.deb \`\`\`wget\`将一个名为\`mcli\_20220509040826.0.0\_amd64.deb\`的文件放到你的工作目录中。用以下方法安装它: \`\`command sudo dpkg -i<^>mcli\_20220509040826.0.0\_amd64.deb \`\`<^><^>这个命令使MinIO客户端在你的个人电脑上可用,然后你可以用\`mcli\`命令调用它。要初始化客户端并为你的shell启用自动完成功能,这将有助于输入客户端命令,发出以下命令: \`\`command mcli --autocompletion \`\`你将得到如下输出: \`\` \[secondary\_label Output\] mcli: 配置写到\`/home<^>/sammy<^>/.mcli/config.json\`。mcli: 成功创建了\`/home<^>/sammy<^>/.mcli/share\`. mcli: 初始化共享上传\`/home<^>/sammy<^>/.mcli/share/uploads.json\`文件。 mcli: 初始化共享下载\`/home<^>/sammy<^>/.mcli/share/downloads.json\`文件。 mcli: 通过env var 'SHELL',你的shell被设置为'bash'。 mcli: 在你的'bash'rc文件中启用了自动完成功能。<^><^>请重新启动你的shell。 \`\`\`这个输出告诉你隐藏的配置文件夹和它下面的其他文件夹和配置文件的位置。 要在你当前的shell中启用自动完成功能,而不实际关闭和重新启动它,发出以下命令: \`\`\`command source .profile \`\`\`开箱后,配置文件包含你可以使用MinIO客户端管理的MinIO服务器的访问凭证。你可以在终端编辑器中编辑该文件,也可以使用\`mcli\`添加条目。 要使用\`mcli\`在配置文件中为你的MinIO服务器添加条目,使用以下命令,并使用你在步骤2中为服务器设置的凭证: \`\`command mcli --insecure alias set<^>myminio/<^><^><^>https://your-server-ip:9000<^>minioadmin<^> <^>minioadmin<^>\`\`\`alias set\`命令后的名称可以设置为任何内容。<^><^><^><^> <^><^> <^><^>\`--insecure\`标志是必要的,因为你使用的是自签名证书。没有它,命令会失败,因为客户端会尝试验证证书是否来自受信任的证书颁发机构。<>[注意] **提示:**当使用MinIO客户端连接到MinIO服务器时,总是用`--insecure`标志调用`mcli`命令。这并不意味着连接是不安全的。它只是意味着客户端将不会尝试验证证书的真实性。如果没有这个标志,命令会失败,但只有在使用自签名证书时才使用它。<>使用下面的命令查看\`~/.mcli/config.json\`文件: \`\`command sudo nano ~/.mcli/config.json \`\`\`你会看到你刚添加的\`myminio\`主机: \`\`\` \[label ~/.mcli/config.json\] {"<>version":"10", "aliases":{ "gcs":{ "url":"storage.googleapis.com", "accessKey":"YOUR-ACCESS-KEY-HERE", "secretKey":"YOUR-SECRET-KEY-HERE", "api":"S3v2", "路径":"dns" }, "local":{ "url":"http://localhost:9000", "accessKey":"", "secretKey":"", "api":"S3v4", "path":"自动" }, "<^>myminio":{ "<^> <^>url":<^>"https://your\_server\_ip:9000"<^>,<^>"accessKey":"minioadmin", "<^> <^>secretKey":"minioadmin", "<^> <^>api":"S3v4", "<^> <^>path":"auto"<^>}<^>,"<^> <^><^>play":{ "url":"play.min.io", "accessKey":"ACCESS-KEY", "secretKey":"secret-KEY", "api":"S3v4", "path":"auto" }, "s3":{ "url":"s3.amazonaws.com", "accessKey":"YOUR-ACCESS-KEY-HERE", "secretKey":"YOUR-SECRET-KEY-HERE", "api":"S3v4", "路径":"dns" } ```现在你已经准备好探索客户端附带的命令了。用`-h`标志运行它,打印出帮助页面: ``command mcli -h ``输出应该包括以下内容: `` [secondary_label Output] 命令: alias 管理配置文件中的服务器证书 ls 列出桶和对象 mb 制作一个桶 rb 删除一个桶 cp 复制对象 mv 移动对象 rm 删除对象 mirror 将对象同步到一个远程站点 cat 显示对象内容 head 显示对象的前n行 ... ... 全局标志: --autocompletion 为你的shell安装自动补全 --config-dir值, -C值 配置文件夹的路径(默认:"/home/finid/.mcli" --quiet, -q 禁用进度条显示 --no-color 禁用颜色主题 --json 启用JSON行格式化输出 --debug 启用调试输出 --insecure 禁用SSL证书验证 --help, -h 显示帮助 --version, -v 打印版本 ... ```关于如何使用任何命令的提示,用`h'选项调用它。例如: ``command mcli alias -h ``要收集MinIO服务器的信息,输入: ``command mcli --insecure admin info<^>myminio<^>``输出将与此类似: `` [secondary_label Output] ●<^>your-server-ip<^>:9000 正常运行时间: 8 小时 版本: 2022-05-19T18:20:59Z ````在MinIO服务器运行时,你可以用以下方法重新启动它: ````command mcli --insecure admin service restart<^>myminio<^>````你不能从客户端启动一个停止的MinIO服务器。如果MinIO服务器被停止了,你必须登录到服务器,用步骤5中的`systemctl`命令来启动它。你可以使用:``command mcli --insecure admin service stop<^>myminio<^>``在这一步中,你使用`mcli`命令从本地计算机连接到MinIO服务器,并使用`--insecure`标志。 ## 结论 在本教程中,你使用MinIO建立了一个对象存储服务器,并使用自签证书建立了一个安全连接。你还使用MinIO控制台连接到MinIO服务器,并通过你安装在个人电脑上的MinIO客户端连接到MinIO服务器。 这个设置是一个用于小型开发项目和评估的独立系统。当你准备在生产或主要开发项目中使用它时,你应该把它设置成分布式模式。你可以在[MinIO文档网站](docs.min.io/)上了解更多。Stan…](docs.digitalocean.com/products/vo…](docs.digitalocean.com/products/vo…