[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

  1. 登录 Cloudflare Zero Trust 控制台 (One Dashboard)。
  2. 导航至 Networks -> Tunnels,创建一个新的 Tunnel(命名为 wyse5060-tunnel)。
  3. 获取生成的 TUNNEL_TOKEN
  4. 在服务器 /opt/docker/garage/ 下创建 .env 文件:
CF_TUNNEL_TOKEN=eyJh...你的完整Token...

  1. 回到 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 或兼容服务
  • Endpointhttps://s3.YOURDOMAIN.com
  • Regiongarage
  • Access Key ID:填入阶段一生成的 Key ID
  • Secret Access Key:填入对应的 Secret
  • Bucket Nameobsidian-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/"
posted @ 2026-01-26 00:05  夜歌乘年少  阅读(87)  评论(0)    收藏  举报