# Obsidian 同步 Remotely Save S3 配置指南

> [Obsidian 同步 Remotely Save S3 配置指南](https://www.ftls.xyz/posts/obsidiannote/)
> Penned by [恐咖兵糖](https://www.ftls.xyz/) on 2022-01-27


Obsidian 是非常优秀的笔记软件，其插件非常丰富，极大地丰富了 Obsidian 的功能。本文借助 Remotely Save 实现同步。

<!--more-->

## 相关信息

Obsidian v0.13.19 

Remotely Save v0.2.13

项目地址:

[https://github.com/fyears/remotely-save](https://github.com/fyears/remotely-save)

分享链接:

[obsidian://show-plugin?id=remotely-save](obsidian://show-plugin?id=remotely-save)

插件支持同步方式： S3及其兼容存储，Dropbox，OneDrive for personal，webdev。

## 缘起

我个人算是半个工具控，尝试过许多笔记软件。如云笔记中的 OneNote，Notion，有道云笔记，印象笔记，为知笔记，蚂蚁笔记，幕布等等。在线文档也有使用，如企业微信，飞书文档，语雀等等。也尝试过 VSCode+Git，Joplin，Trilium，思源笔记等等可以自部署的方案。

其中 VSCode+Git 非常好用，但是苦于没有合适的安卓客户端。git也不能使用。很多 Markdown 编辑器也有着不能存储图片的问题，虽然可以存在 Gitee 上，使用 Gitee 网页正常浏览。但终究还是需要更稳定的解决方案。

Joplin 是非常优秀的软件，虽然客户端不太好看，但是确实足够用了。Joplin 本身也支持S3存储，我使用过 腾讯云 COS 作为存储方案，但是他会生成非常多的文件。我不到 100 个笔记有 7000+ 文件生成。

Obsidian 以前就一直在关注了，由于 Obsidian 使用本地文件夹，我曾经配置过同步文件夹软件。但是比较麻烦。可以说，插件的出现解决了一个大麻烦。Remotely Save 可以说我一直在等待这样一个插件。

## S3存储

可使用 AWS S3 , 腾讯云 COS ，阿里云 OSS 。截止发文，阿里云 OSS 可以正常同步但是 Check Connectivity 时会报错。我测试COS可以正常使用，同时贴出 COS ，OSS 相关配置。

### Obsidian COS 费用计算

购买资源包 1年约7折 都是一年计算

|    项目    |    规格    | 费用（1年） |
|:----------:|:----------:|:-----------:|
| 10GB存储包 |    10GB    |   约10 元   |
|  外网流量  |  每月10GB  |   约40元    |
|  读写请求  | 每月20万次 |   不到2元    |

总计每年约 52元，就可以有 10GB 存储，每月 10GB 流量，读写请求每月 20万次的笔记了。

并且如果达不到每月的资源包消耗，可以不购买资源包。比如10G存储包，实际个人笔记很难达到10G。再如流量费用:存储 1G 笔记，预计正常同步一年可能不超过10元。每多一个同步设备每次额外花费0.5元流量费用。读写请求费用比较低，也不占大头。

我预估值可能出现错误，我会使用这个COS存储一段时间来完善我的费用数据，但是总而言之，轻量使用费用不会很高。截止 202306根据使用情况，我的笔记约千条笔记，平均每月费用不足 0.3 元。每月大约几百兆流量，几万次请求。


## 插件配置同步

使用这个插件配置同步功能时，导出配置会显示一个二维码或者是一条链接。在一个需要安装了 Remotely Save 的新设备上建立名称相同的库，并且安装这个同步插件。然后使用手机二维码识别功能，就可以正常的导入配置了。

配置示例：

| 配置项目名 | OSS | COS|
| -------- | -------- | -------- |
| s3Endpoint | oss-cn-beijing.aliyuncs.com      | cos.ap-beijing.myqcloud.com |
|s3Region|oss-cn-beijing| ap-beijing | 
|s3AccessKeyID| AccessKey 获取 | AccessKey 获取|
|s3SecretAccessKey| AccessKey 获取|AccessKey 获取|
|s3BucketName| obsidian-123 | obsidian | 

说明： 

s3Endpoint OSS COS 均选择了北京节点

s3AccessKeyID，s3SecretAccessKey 对应的子用户记得授权。

s3BucketName 为存储桶名称。

**注意** 注意添加授权跨域请求CORS，后面图11为CORS配置界面。高版本 Obsidian 和 Remotely Save 并不必须

>app://obsidian.md
>capacitor://localhost
>http://localhost




COS 可以参考：

[Joplin使用腾讯云对象存储（COS）进行同步 - 知乎](https://zhuanlan.zhihu.com/p/346460176)

Joplin 和这个插件类似，除了填写的东西不同其他均相同。下面是我个人配置的。
 
### COS 配置流程

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-26-47.png" caption="1 打开访问控制" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-27-26.png" caption="2 创建用户" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-28-56.png" caption="3 创建用户" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-30-02.png" caption="4 创建用户" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-31-06.png" caption="5 创建用户" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-32-12.png" caption="6 创建存储桶" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-33-22.png" caption="7 创建存储桶" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-34-04.png" caption="8 创建存储桶" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-34-29.png" caption="9 创建存储桶" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-36-40.png" caption="10 配置子用户授权" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-37-50.png" caption="11 配置CORS" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-39-10.png" caption="12 获取基本信息" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-43-36.png" caption="13 安装插件" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-45-51.png" caption="14 填写信息" >}}

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-46-51.png" caption="15 Check 测试连接成功" >}}

OSS 配置类似


### OSS 配置流程

阿里云对象存储 OSS 和腾讯云 COS 对象存储步骤一致，只不过界面有所不同。


{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021149033.png" caption="1 注册阿里云账户，进入控制台，右上角悬浮，选择访问控制-用户" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021151364.png" caption="2 创建一个没有任何权限的账户 保存好 AccessKey ID 和 AccessKey Secret" >}}

注意：没保存也可以在访问控制-用户中找到并查看 AccessKey ID 和 AccessKey Secret

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021152786.png" caption="3 打开阿里云对象存储控制台 创建存储桶" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021155892.png" caption="4 填写 Bucket 名称 其余默认 可选-打开版本控制" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021159767.webp" caption="5 如果打开版本控制，需要配置生命周期-创建规则" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021203356.png" caption="6 生命周期-规则-整个存储桶" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021201774.png" caption="7 生命周期-规则-下拉找到历史版本-选择将历史文件在一个月后删除" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021214574.png" caption="8 配置授权 给刚刚的没有任何权限的账户 权限范围 整个存储桶完全控制权限" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021217211.png" caption="9 存储桶概述里找到其他参数" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021218003.png" caption="10 填写完成后检查 成功即可正常同步" >}}

{{< image src="https://cdn.ftls.xyz/images/2023/12/202312021219945.png" caption="11 效果" >}}


### 其他对象存储说明

还有一些可选的，比如 七牛云 Kodo ，自建对象存储 MinIO 。大同小异，就不一一赘述了。

我注意到有人提到七牛云 Kodo 没有备案域名问题，实际上仅仅为 Obsidian 笔记备份，没有备案域名不是问题。一般说需要备案域名是在搭建图床后，没有备案域名不能公开访问。而同步笔记不会用到这个功能。不过 Kodo 免费 10GB 存储是个不大不小的吸引人的地方，但是正常购买一月 10GB 也就 1 元，正常使用存储笔记的费用也不占大头。根据个人需求尝试选择吧。


## 其他端配置流程

使用这个插件配置同步功能，导出配置会显示一个二维码或者是一条链接。在新设备上建立**名称相同**的库，并且安装这个同步插件。然后使用手机二维码识别功能，就可以正常的导入配置了。

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_19-52-09.png" caption="16 快速配置二维码" >}}

## 同步

{{< image src="https://cdn.ftls.xyz/images/2022/01/Snipaste_2022-01-27_20-01-31.png" caption="17 同步" >}}

## 问题

每次同步前后移动文件都要注意，可能出现重复文件。同步是增量同步，不会删除本地文件。逻辑是云，手机，PC中同一文件，PC删除后，云也删除。手机同步时，不会删除。这个问题在后续版本得到了解决。但是如果忘记手动同步，还是可能出现数据混乱。

## 常见问题及回答

1. ios 版本问题
remotely save 插件作者提到 ios15 以上可以工作，而作者手头没有相关设备无法测试。低版本 ios 可能无法使用
2. 体验不够丝滑
如果感觉 remotely save 效果慢等问题，不追求移动端同步可选坚果云等支持文件夹同步到软件。或者加预算使 Self-hosted LiveSync (ex:Obsidian-livesync) 插件 CouchDb 数据库同步，此插件支持移动端，支持实时同步，门槛高一些体验好一些。
3. 应该买哪种资源包？存储容量，流量，读写请求如何选择？
建议使用一段时间后看账单决定，一般而言无需购买资源包。
4. 插件无法加载
尝试重新下载，或复制配置完成的库文件夹到无法加载的设备本地文件夹上
5. 报错 AWS authentication requires a valid Date
or x-amz-date header
更改到正确的时区
6. 每次打开都会大量下载笔记和附件
我个人是双系统 ， Windows 与 Linux 之间公用文件夹出现这个问题。而这两个系统在同一个设备上时间上有个坑。说回来这个问题最后我的方案是不同步 1Mb 以上的附件。如有详细原因请给我留言或发邮件，待补充
7. 误删文件问题
由于插件规则是新文件替换旧文件，删除的文件列表会单独在云端存一个文件，包含删除的文件名和文件修改时间。然后同步时就会特意删除文件了。
避免误删误操作的方法 
 - 删除文件，在 obsidian 中设置成移动到 .trash 目录即可。文件丢了上那里去找就行了。
 - 多端同步时，别的设备先不同步稍微修改下文件，使修改日期最新，然后同步应该就可以了。
 - 对象存储服务，如 阿里云 oss，腾讯云 cos 都有版本控制功能。创建存储-高级可选配置，打开版本控制。误删除文件后，并同步后，可在对象存储-文件列表-历史版本中看到。也就可以恢复了。（注意设置生命周期及时清理历史文件，避免大量为不必要的历史文件存储付费）
8. 报错 request failde,status403
权限配置错误。也可能没配置跨域，还有可能是设备时间差了 15 分钟以上。其余错误原因可能较小暂时不提。参考 https://cloud.tencent.com/document/product/436/54303
9. 总是忘记手动同步，是否可以自动同步？
仅可以配置启动后一定时间内执行一次同步，以及几分钟执行一次。
10. 扫码报错
注意库文件夹名需要一致

## 高级玩法

1. Alist 挂载，Web 端读写对象存储内的笔记
2. Alist 挂载，安卓 Mix 挂载 Alist 提供的 WebDAV 读写笔记
3. 使用对象存储 API 操作文件，按这个思路可以达到一部分云笔记提供的 API 功能。

如果有服务器或 NAS ，可使用 Docker 部署并配置 Obcsapi-Go ，本文标题下面的系列文章有介绍。开源项目 https://gitee.com/kkbt/obcsapi-go
即使没有，可使用阿里云云函数，熟悉的话几分钟就能搭建好了。此外 Obcsapi 的 Python 早期版本就是使用了云函数，供参考。

Obcsapi Go 效果：类似 flomo ，有 PWA 应用与一些 API 。用户可编写 Lua 和 Bash 自定义或拓展功能。更多功能见文档

高级玩法最好有些编程基础，或者至少熟练使用 Docker 等工具。代码开源，可根据需要自行修改。

此外，因为 markdown 纯文本特性，本身方便程序操作。具体拓展功能，或程序语言问题可以问现在的 AI 即可。如问题 “使用 python 找到一个文件夹下所有 .md 文件，并将打印所有包含 #tag 的行。”操作文件前注意备份。