windows 部署 minio,实现内网 S3 同步思源

本文首发于 ❄️ 慕雪的寒舍

windows 部署 minio,实现内网 S3 同步思源。

1. 什么是 minio?

关于 minio 和 S3 同步的介绍,可以看本站的这篇文章:【docker】部署 minio 对象存储并用 rclone 同步

思源笔记支持 S3 同步,且比起 webdav,始终更加推荐 S3 协议来同步思源笔记。

本文的内容适用于如下场景:

  1. 我只想在内网的其他机器上同步思源笔记。比如我只是想有一个快捷的方式能把 PC 写的笔记同步到手机 APP 上,在手机上基本只作电脑不在身旁时的临时阅读使用。
  2. 我对同步的实时性要求不高,每天回家之后可以执行一次同步让手机的文档更新即可。

在这个场景中,用户的需求并不是需要跨多个网络的云端同步,只是想用同步做一个中转站,能把数据从 PC 快捷导入到手机上而已。某种意义上说,我就是这类用户。

由于对同步的实时性要求不高,完全可以通过在 windows 主机上自建 minio 的方式来实现内网的思源笔记 S3 同步,这样就不需要去购买云端的 S3 服务了。

即便在这个场景下,云端 S3 的资费并不高,但这笔钱还是可以省下来嘛。

minio 的官网上,就贴出了在 windows 下部署 minio 的命令,还有更详细的部署教程。注意要选择的是非 Enterprise 的这个栏目,Enterprise 的是企业专业版,需要购买授权。

image.png

本文将用一个 win10 的虚拟机带大家走一遍这个安装流程,毕竟我之前也没部署过 windows 下的。

在部署了之后,我会切换到宿主机(模拟内网中的另外一台机器)和手机 app,尝试用思源笔记进行同步操作,以确认该方案的可行性。

使用的思源笔记版本为 v3.1.3

2. 开整

把官方的命令 copy 过来,试试运行。

PS> Invoke-WebRequest -Uri "https://dl.min.io/server/minio/release/windows-amd64/minio.exe" -OutFile "C:\minio.exe"
PS> setx MINIO_ROOT_USER admin
PS> setx MINIO_ROOT_PASSWORD password
PS> C:\minio.exe server F:\Data --console-address ":9001"

注意,第一个命令是用来下载文件的,你可以直接在官网也没点击 download 下载 minio.exe,这样就可以不用命令行了。edge 会提示你“通常不会保留 minio.exe”,点击更多选项里面的仍然保留即可。

image.png

这里我将其放到桌面的 minio 文件夹里面,然后用 powershell 命令行进入这个文件夹

image.png

备注:win10 自带的 powershell 界面简陋,建议去微软商店下载最新版本的 windows terminal 终端工具,更好看。
image.png

win10 在系统搜索栏里面搜索 powershell,将其打开,输入如下命令进入桌面的 minio 文件夹。

cd C:\Users\用户名\Desktop\minio

进入桌面的 minio 文件夹了以后,执行官方给出的三个命令,前两个命令是用来设置初试的管理员用户和密码的。第三个命令是启动 minio 服务端,这里我修改了原本给出的启动命令里面的 F 盘,那个是 minio 的文件保存目录,我将其修改成了和 minio.exe 同级目录中的 data 文件夹。

cd C:\Users\用户名\Desktop\minio
setx MINIO_ROOT_USER muxue
setx MINIO_ROOT_PASSWORD 123456
.\minio.exe server .\data --console-address ":9001"

键入启动命令后,会弹出防火墙提示,点击允许访问即可。

image.png

到这里,其实 minio 服务端就已经启动了。可以用 http://192.168.154.131:9001 放问控制台界面。

但是,启动命令的输出最下方有一个警告

WARN: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables

警告说默认的账户和密码并没有被修改,推荐使用 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 环境变量将其修改。这说明刚刚我执行过的两个 setx 命令并没有生效,即便命令的提示是“指定值已经保存”。我猜测是因为 powershell 没有用管理员身份执行,尝试用管理员身份重新启动一个 powershell,再次执行如上命令。

果然,用管理员身份启动 powershell,执行了 setx 命令后,重新启动 minio,报错变成了下面这个:

FATAL Unable to validate credentials inherited from the shell environment: Invalid credentials
      > Please provide correct credentials
      HINT:
        MINIO_ROOT_USER length should be at least 3, and MINIO_ROOT_PASSWORD length at least 8 characters

这个报错的含义是,用户名至少 3 个字符,用户密码至少 8 个字符,而刚刚我只设置了 6 个字符的密码,需要重新修改一下密码。

cd C:\Users\用户名\Desktop\minio
setx MINIO_ROOT_USER muxue
setx MINIO_ROOT_PASSWORD 12345678
.\minio.exe server .\data --console-address ":9001"

这一次命令执行就没有问题了,我们成功设置了用户名和密码。在 minio 文件夹里面也出现了 data 子文件夹。

image.png

这里显示了两个 URL 路径:

  • 一个是 9000 端口(API 端口,思源 S3 同步需要使用这个端口)。
  • 另外一个是 9001 端口(WEB 管理页面端口,登录和创建 Bucket 需要使用这个端口)。

浏览器打开 9001 端口,进入 minio 的 web 界面,登录。

image.png

进入主页面了之后,分别在 Bucket 目录下创建一个存储桶,在 Access Keys 栏目下创建一个用户密钥。这部分操作和【docker】部署 minio 对象存储并用 rclone 同步里面提到过的完全一致。

image.png

点击 Buckets 里面的 Create Bucket,填写一个名字,下面的三个选项都不需要选,对于思源同步来说这三个选项没有作用。然后点击右下角的 Create Bucket 按钮创建这个桶。

image.png

Access Keys 也是如此,创建一个,填写一下 name 即可。这里的 Expriy 是过期时间,不填写就是永不过期。点击 Create 创建,将 AK 和 SK 记录下来。

image.png

image.png

现在我们就创建好了思源同步需要的所有东西了,可以去思源客户端里面填写了。

3. 思源 PC 客户端填写密钥

填写方式如下图所示:

  • Endpoint 填 minio 的 API9000 端口号的地址;
  • AK 和 SK 填刚刚粘贴的;
  • Bucket 填存储桶的名字;
  • Region 默认是 us-east-1
  • Addressing 改成 Path-style
  • TLS Verfiy 改成 Skip 跳过,因为我们没有配置证书;

image.png

到这里就配置成功了,点击思源的云按钮,上传一次数据看看。没有问题,上传成功了。

image.png

在 minio 控制台的 bucket 一栏也能看到最新的数据。

image.png

在桌面上的 minio 文件夹 data 目录中也有对应文件。

image.png

到这里,我们的配置就成功了!

4. 第二台设备配置思源同步

第二台设备中只需要能访问 minio 的控制台,那他就可以访问 minio 的 API 端口。

用另外一台设备(宿主机)打开局域网 IP 地址的时候,会发现是 502,这代表我们的请求被 windows 的防火墙拦截了。可以参考本站的【win】windows 开启特定端口防火墙教程开启防火墙。配置的时候,入站、出站规则都须同时配置,协议选择 tcp,可以只允许 9000API 端口,也可以把 9000 和 9001 都允许了。

image.png

不过,我发现我的宿主机还是没有办法访问虚拟机,就连 ping 都是不通的。

正在 Ping 192.168.154.131 具有 32 字节的数据:
请求超时。

192.168.154.131 的 Ping 统计信息:
    数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失),

发现在虚拟机防火墙的入站规则中,ICMP(ping 需要这个)默认是被禁用的。右键它们将其设置为启用。

image.png

现在就可以被 ping 通了

正在 Ping 192.168.154.131 具有 32 字节的数据:
来自 192.168.154.131 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.154.131 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.154.131 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.154.131 的回复: 字节=32 时间<1ms TTL=128

192.168.154.131 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

不过,我还是没有办法访问 minio 的 web 页面。原因未知,不是防火墙问题。在宿主机上使用 curl 命令会得到如下输出,这是 minio 服务端发回的响应,这代表我们的宿主机已经可以访问到虚拟机的 minio 了,但是因为其他的原因导致控制台加载不出来。

PS> curl http://192.168.154.131:9001/
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="/"/><meta content="width=device-width,initial-scale=1" name="viewport"/><meta content="#081C42" media="(prefers-color-scheme: light)" name="theme-color"/><meta content="#081C42" media="(prefers-color-scheme: dark)" name="theme-color"/><meta content="MinIO Console" name="description"/><meta name="minio-license" content="agpl" /><link href="./styles/root-styles.css" rel="stylesheet"/><link href="./apple-icon-180x180.png" rel="apple-touch-icon" sizes="180x180"/><link href="./favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link href="./favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="./favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link href="./manifest.json" rel="manifest"/><link color="#3a4e54" href="./safari-pinned-tab.svg" rel="mask-icon"/><title>MinIO Console</title><script defer="defer" src="./static/js/main.41754270.js"></script><link href="./static/css/main.e60e4760.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div id="preload"><img src="./images/background.svg"/> <img src="./images/background-wave-orig2.svg"/></div><div id="loader-block"><img src="./Loader.svg"/></div></div></body></html>

不过这不是问题,使用和虚拟机里面一样的 S3 配置,已经可以成功下载资料啦!右上角的工作空间名字和虚拟机内不一样,足以证明在另外一台电脑上配置成功了。

image.png

5. 模拟手机 app 同步

手机 app 我用模拟器装一个,也能实现同步!

image.png

6. minio 开机自启

现在就剩下最后一个问题了,即把 minio 配置为开机自启,避免每次都得手动启动服务器程序。首先将如下内容写入一个 minio_server.bat 里面。

setx MINIO_ROOT_USER muxue
setx MINIO_ROOT_PASSWORD 12345678
C:\Users\用户名\Desktop\minio\minio.exe server C:\Users\用户名\Desktop\minio\data --console-address ":9001"

然后创建一个 .vbs 文件,写入如下内容,这样可以在启动 bat 的时候隐藏控制台。

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "C:\Users\用户名\Desktop\minio\minio_server.bat", 0, False

将这个 .vbs 文件放入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 里面,这个文件夹内的文件都会被开机自启。

image.png

在任务管理器的启动里面,也能看到这个新增的 vbs 文件

image.png

重启虚拟机,看看是否能自动启动 minio 服务端。

image.png

没有问题,自动启动成功。而且账户和密码都是正确的,数据也正常。

image.png

7. 搞定

有啥问题,欢迎评论区留言交流!

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    23020 引用 • 92609 回帖
  • MinIO
    7 引用 • 28 回帖
  • S3
    8 引用 • 207 回帖
2 操作
muxue 在 2024-08-24 20:36:58 更新了该帖
muxue 在 2024-08-24 18:04:30 置顶了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • pyysxk

    大佬这个“Endpoint”ipv4 地址变的话要重新填 有没有办法可以解决一下 😭🙏

    1 回复
  • 其他回帖
  • muxue

    你是填 hosts 了吧,只有 dns 解析有问题才需要填 hosts 文件的,可以考虑把电脑的 dns 换成公共 dns 试试。

  • dereks

    感谢大佬分享

  • hahnohah

    感谢楼主,同步成功!一开始不知道启动 minio 需要 powershell 一直开着,自己把 powershell 关了发现 web 访问不了 minio 了,然后又试着再次启动 minio,盲猜了两次用 .\minio.exe server .\data --console-address ":9001" 在 powershell 里再次成功启动 minio,然后继续跟着教程继续。

  • 查看全部回帖