Sign inSign up

lovechen/syncnode

By lovechen

•Updated 6 months ago

Lightweight file sync client with token auth

Image
0

10K+

lovechen/syncnode repository overview

⁠SyncNode

增量文件同步客户端 — 从 SyncHub 自动拉取文件,SHA256 校验 + 原子写入。

Docker Pulls

⁠功能特点

  • 增量同步 — SHA256 哈希比对,仅下载变更文件
  • 原子写入 — 临时文件 + Rename,避免写入中断导致损坏
  • 双阶段重试 — 3×5s 快速重试 + 5×30s 慢速重试
  • 自动清理 — REMOVE_MISSING=true 时删除远端已不存在的文件
  • 递归目录 — 自动同步子目录结构
  • 状态持久化 — records.json 记录文件状态,重启不重复下载
  • 双架构 — linux/amd64 + linux/arm64
  • 极小镜像 — scratch 基底 + garble 混淆 + UPX 压缩 (~5MB)

⁠快速部署

⁠1. 创建环境变量文件
cp .env.example .env
# 编辑 .env 填入真实值
# .env
BASE_URL="https://synchub.example.com"   # SyncHub 服务器地址
UUID="your-access-path-uuid"              # AccessPath

# 认证
TOKEN="your-token-uuid"                   # 认证令牌

# 同步
LOCAL_DIR="/data/certs"                   # 本地存储目录
SYNC_INTERVAL="1h"                        # 同步间隔 (s/m/h/d)
REMOVE_MISSING=true                       # 删除远端不存在的文件

# TLS
INSECURE_SKIP_VERIFY=false                # 跳过 TLS 证书验证
⁠2. Docker Compose
# docker-compose.yml
services:
  syncnode:
    image: lovechen/syncnode
    container_name: syncnode
    restart: always
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./files:/data/certs
    env_file:
      - .env
⁠3. 启动
docker compose up -d
docker compose logs -f    # 查看同步日志

⁠环境变量

变量必填默认值说明
BASE_URL✅—SyncHub 服务器地址
UUID✅—AccessPath (对应 SyncHub config.yml 中的 accessPath)
TOKEN✅—认证令牌 (对应 SyncHub config.yml 中的 token)
LOCAL_DIR✅—本地存储目录
SYNC_INTERVAL❌1h同步间隔,支持 30s 5m 1h 1d 1h30m
REMOVE_MISSING❌true是否删除远端不存在的文件
INSECURE_SKIP_VERIFY❌false是否跳过 TLS 证书验证

⁠工作原理

┌─────────────┐    JSON API     ┌─────────────┐
│  SyncNode   │ ──────────────► │   SyncHub   │
│             │ GET /{uuid}/    │             │
│  比对 hash  │ ◄────────────── │  文件列表    │
│             │  [{name, hash}] │             │
│  下载变更   │ ──────────────► │             │
│             │ GET /{uuid}/f   │  文件内容    │
│  原子写入   │ ◄────────────── │             │
└─────────────┘                 └─────────────┘
  1. 通过 JSON API 获取远端文件列表 (name + SHA256 hash)
  2. 与本地 records.json 比对,识别新增/变更/删除
  3. 增量下载变更文件,临时文件写入后 Rename (原子操作)
  4. 可选清理远端已删除的本地文件
  5. 更新 records.json 状态记录

⁠示例用途

  • 🔐 SSL 证书自动分发到边缘节点
  • ⚙️ 配置文件多机同步
  • 📦 静态资源 CDN 源站同步
  • 📋 任意文件的定时增量同步

⁠搭配 SyncHub

SyncHub 是配套的中心文件服务器:

docker pull lovechen/synchub

详见 lovechen/synchub⁠。

Tag summary

Content type

Image

Digest

sha256:cac8d379c…

Size

5.3 MB

Last updated

6 months ago

docker pull lovechen/syncnode