本文首发于 ❄️ 慕雪的寒舍
windows 部署 minio,实现内网 S3 同步思源。
1. 什么是 minio?
关于 minio 和 S3 同步的介绍,可以看本站的这篇文章:【docker】部署 minio 对象存储并用 rclone 同步。
思源笔记支持 S3 同步,且比起 webdav,始终更加推荐 S3 协议来同步思源笔记。
本文的内容适用于如下场景:
- 我只想在内网的其他机器上同步思源笔记。比如我只是想有一个快捷的方式能把 PC 写的笔记同步到手机 APP 上,在手机上基本只作电脑不在身旁时的临时阅读使用。
- 我对同步的实时性要求不高,每天回家之后可以执行一次同步让手机的文档更新即可。
在这个场景中,用户的需求并不是需要跨多个网络的云端同步,只是想用同步做一个中转站,能把数据从 PC 快捷导入到手机上而已。某种意义上说,我就是这类用户。
由于对同步的实时性要求不高,完全可以通过在 windows 主机上自建 minio 的方式来实现内网的思源笔记 S3 同步,这样就不需要去购买云端的 S3 服务了。
即便在这个场景下,云端 S3 的资费并不高,但这笔钱还是可以省下来嘛。
在 minio 的官网上,就贴出了在 windows 下部署 minio 的命令,还有更详细的部署教程。注意要选择的是非 Enterprise 的这个栏目,Enterprise 的是企业专业版,需要购买授权。
本文将用一个 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”,点击更多选项里面的仍然保留即可。
这里我将其放到桌面的 minio 文件夹里面,然后用 powershell 命令行进入这个文件夹
备注:win10 自带的 powershell 界面简陋,建议去微软商店下载最新版本的 windows terminal 终端工具,更好看。
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"
键入启动命令后,会弹出防火墙提示,点击允许访问即可。
到这里,其实 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_USER
和 MINIO_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 子文件夹。
这里显示了两个 URL 路径:
- 一个是 9000 端口(API 端口,思源 S3 同步需要使用这个端口)。
- 另外一个是 9001 端口(WEB 管理页面端口,登录和创建 Bucket 需要使用这个端口)。
浏览器打开 9001 端口,进入 minio 的 web 界面,登录。
进入主页面了之后,分别在 Bucket 目录下创建一个存储桶,在 Access Keys 栏目下创建一个用户密钥。这部分操作和【docker】部署 minio 对象存储并用 rclone 同步里面提到过的完全一致。
点击 Buckets 里面的 Create Bucket,填写一个名字,下面的三个选项都不需要选,对于思源同步来说这三个选项没有作用。然后点击右下角的 Create Bucket 按钮创建这个桶。
Access Keys 也是如此,创建一个,填写一下 name 即可。这里的 Expriy 是过期时间,不填写就是永不过期。点击 Create 创建,将 AK 和 SK 记录下来。
现在我们就创建好了思源同步需要的所有东西了,可以去思源客户端里面填写了。
3. 思源 PC 客户端填写密钥
填写方式如下图所示:
- Endpoint 填 minio 的 API9000 端口号的地址;
- AK 和 SK 填刚刚粘贴的;
- Bucket 填存储桶的名字;
- Region 默认是
us-east-1
; - Addressing 改成
Path-style
; - TLS Verfiy 改成
Skip
跳过,因为我们没有配置证书;
到这里就配置成功了,点击思源的云按钮,上传一次数据看看。没有问题,上传成功了。
在 minio 控制台的 bucket 一栏也能看到最新的数据。
在桌面上的 minio 文件夹 data 目录中也有对应文件。
到这里,我们的配置就成功了!
4. 第二台设备配置思源同步
第二台设备中只需要能访问 minio 的控制台,那他就可以访问 minio 的 API 端口。
用另外一台设备(宿主机)打开局域网 IP 地址的时候,会发现是 502,这代表我们的请求被 windows 的防火墙拦截了。可以参考本站的【win】windows 开启特定端口防火墙教程开启防火墙。配置的时候,入站、出站规则都须同时配置,协议选择 tcp,可以只允许 9000API 端口,也可以把 9000 和 9001 都允许了。
不过,我发现我的宿主机还是没有办法访问虚拟机,就连 ping 都是不通的。
正在 Ping 192.168.154.131 具有 32 字节的数据:
请求超时。
192.168.154.131 的 Ping 统计信息:
数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失),
发现在虚拟机防火墙的入站规则中,ICMP(ping 需要这个)默认是被禁用的。右键它们将其设置为启用。
现在就可以被 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 配置,已经可以成功下载资料啦!右上角的工作空间名字和虚拟机内不一样,足以证明在另外一台电脑上配置成功了。
5. 模拟手机 app 同步
手机 app 我用模拟器装一个,也能实现同步!
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
里面,这个文件夹内的文件都会被开机自启。
在任务管理器的启动里面,也能看到这个新增的 vbs 文件
重启虚拟机,看看是否能自动启动 minio 服务端。
没有问题,自动启动成功。而且账户和密码都是正确的,数据也正常。
7. 搞定
有啥问题,欢迎评论区留言交流!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于