【win】windows部署minio,实现内网S3同步思源
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过来,试试运行。
1 | PS> Invoke-WebRequest -Uri "https://dl.min.io/server/minio/release/windows-amd64/minio.exe" -OutFile "C:\minio.exe" |
注意,第一个命令是用来下载文件的,你可以直接在官网也没点击download下载minio.exe
,这样就可以不用命令行了。edge会提示你“通常不会保留minio.exe”,点击更多选项里面的仍然保留即可。
这里我将其放到桌面的minio文件夹里面,然后用powershell命令行进入这个文件夹
备注:win10自带的powershell界面简陋,建议去微软商店下载最新版本的windows terminal终端工具,更好看。
win10在系统搜索栏里面搜索powershell,将其打开,输入如下命令进入桌面的minio文件夹。
1 | cd C:\Users\用户名\Desktop\minio |
进入桌面的minio文件夹了以后,执行官方给出的三个命令,前两个命令是用来设置初试的管理员用户和密码的。第三个命令是启动minio服务端,这里我修改了原本给出的启动命令里面的F盘,那个是minio的文件保存目录,我将其修改成了和minio.exe
同级目录中的data文件夹。
1 | cd C:\Users\用户名\Desktop\minio |
键入启动命令后,会弹出防火墙提示,点击允许访问即可。
到这里,其实minio服务端就已经启动了。可以用http://192.168.154.131:9001
放问控制台界面。
但是,启动命令的输出最下方有一个警告。
1 | 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,报错变成了下面这个:
1 | FATAL Unable to validate credentials inherited from the shell environment: Invalid credentials |
这个报错的含义是,用户名至少3个字符,用户密码至少8个字符,而刚刚我只设置了6个字符的密码,需要重新修改一下密码。
1 | cd C:\Users\用户名\Desktop\minio |
这一次命令执行就没有问题了,我们成功设置了用户名和密码。在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都是不通的。
1 | 正在 Ping 192.168.154.131 具有 32 字节的数据: |
发现在虚拟机防火墙的入站规则中,ICMP(ping需要这个)默认是被禁用的。右键它们将其设置为启用。
现在就可以被ping通了
1 | 正在 Ping 192.168.154.131 具有 32 字节的数据: |
不过,我还是没有办法访问minio的web页面。原因未知,不是防火墙问题。在宿主机上使用curl命令会得到如下输出,这是minio服务端发回的响应,这代表我们的宿主机已经可以访问到虚拟机的minio了,但是因为其他的原因导致控制台加载不出来。
1 | PS> curl http://192.168.154.131:9001/ |
不过这不是问题,使用和虚拟机里面一样的S3配置,已经可以成功下载资料啦!右上角的工作空间名字和虚拟机内不一样,足以证明在另外一台电脑上配置成功了。
5. 模拟手机app同步
手机app我用模拟器装一个,也能实现同步!
6. minio开机自启
现在就剩下最后一个问题了,即把minio配置为开机自启,避免每次都得手动启动服务器程序。首先将如下内容写入一个minio_server.bat
里面。
1 | setx MINIO_ROOT_USER muxue |
然后创建一个.vbs
文件,写入如下内容,这样可以在启动bat的时候隐藏控制台。
1 | Set WshShell = CreateObject("WScript.Shell") |
将这个.vbs
文件放入C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
里面,这个文件夹内的文件都会被开机自启。
在任务管理器的启动里面,也能看到这个新增的vbs文件
重启虚拟机,看看是否能自动启动minio服务端。
没有问题,自动启动成功。而且账户和密码都是正确的,数据也正常。
7. 搞定
有啥问题,欢迎评论区留言交流!