[Linux]基于Garage + Cloudflare Tunnel + Remotely Save搭建Obsidian同步仓库
背景信息
Minio已放弃维护其docker hub镜像,转为使用Garage。
服务端部署
1. 目录结构初始化
在宿主机创建规范目录结构:
mkdir -p /opt/docker/garage/{data,meta}
cd /opt/docker/garage
2. 配置 Garage 核心参数
创建 /opt/docker/garage/garage.toml:
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
replication_factor = 1
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
# 生成一个 32 字节的随机十六进制串,可用命令:openssl rand -hex 32
rpc_secret = "替换为你生成的随机十六进制字符串"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
3. 获取并配置Tunnel Token
- 登录 Cloudflare Zero Trust 控制台 (One Dashboard)。
- 导航至 Networks -> Tunnels,创建一个新的 Tunnel(命名为
wyse5060-tunnel)。 - 获取生成的
TUNNEL_TOKEN。 - 在服务器
/opt/docker/garage/下创建.env文件:
CF_TUNNEL_TOKEN=eyJh...你的完整Token...
- 回到 Cloudflare 控制台,配置 Public Hostname:
- Subdomain:
s3 - Domain: 你的域名
- Service:
HTTP://garage:3900(利用 Docker DNS 直接解析容器名)
4. 编写 Docker Compose 文件
创建 /opt/docker/garage/docker-compose.yml:
version: '3.8'
services:
garage:
image: dxflrs/garage:v2.2.0
container_name: garage_s3
restart: unless-stopped
volumes:
- ./garage.toml:/etc/garage.toml:ro
- ./meta:/var/lib/garage/meta
- ./data:/var/lib/garage/data
# 不映射端口到宿主机,仅通过 Docker 内部网络提供给 cloudflared 访问,实现物理隔离
cloudflared:
image: cloudflare/cloudflared:2026.2.0-amd64
container_name: cloudflared_tunnel
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN=${CF_TUNNEL_TOKEN}
5. 启动与拓扑初始化
启动服务:
docker compose up -d
初始化单节点拓扑结构:
# 获取节点 ID,节点ID位于Connection established to后
sudo docker exec garage_s3 /garage status
# 将输出的节点 ID (如 e3b0...) 分配到区域 dc1,容量权重设为 100G(最高占用100G)
sudo docker exec garage_s3 /garage layout assign <节点ID> -z dc1 -c 100G
# 应用拓扑结构使节点生效
sudo docker exec garage_s3 /garage layout apply --version 1
6. 创建 Bucket 与凭证
# 1. 创建名为 obsidian-vault 的存储桶
sudo docker exec garage_s3 /garage bucket create obsidian-vault
# 2. 创建一个名为 sync-key 的 API 密钥对
sudo docker exec garage_s3 /garage key create sync-key
# 3. 授权:允许该密钥对 obsidian-vault 拥有所有权及读写权限
sudo docker exec garage_s3 /garage bucket allow obsidian-vault --read --write --owner --key sync-key
执行完 key create 后,终端会打印出类似下面的信息,这是连接 S3 唯一的凭证:
Key ID: (一串类似于 0f2b... 的字符) -> 这对应 Remotely Save 里的 Access Key ID
Secret key: (一串长字符) -> 这对应 Remotely Save 里的 Secret Access Key
客户端配置
在移动端 Obsidian -> Remotely Save 插件中进行以下配置:
1. S3 连接配置
- 选择服务:S3 或兼容服务
- Endpoint:
https://s3.YOURDOMAIN.com - Region:
garage - Access Key ID:填入阶段一生成的 Key ID
- Secret Access Key:填入对应的 Secret
- Bucket Name:
obsidian-vault - Force Path Style (强制路径样式):开启
2. 加密与功耗控制配置
- 端到端加密:开启。设置高强度主密码。所有文件将以
.enc格式在物理介质和网络链路中存在。 - 自动运行:关闭。
- 在修改后自动同步:关闭。
- 在启动后执行:开启。设置 3-5 秒延迟。确保仅在应用启动时唤醒网络基带进行一次差异比对,其余时间保持静默。
其他操作
清空Bucket
sudo docker run -it --rm --network container:garage_s3 --entrypoint /bin/sh minio/mc -c "\
mc alias set mygarage http://127.0.0.1:3900 <你的AK> <你的SK> && \
mc rm --recursive --force mygarage/obsidian-vault/"

浙公网安备 33010602011771号