Lyncd + ossfs 实现实时同步到阿里云 OSS

🧭 背景介绍

最近刚把博客静态文件全部上了阿里云OSS图床和CDN,在日常的写作过程中,我通常需要先在本地通过PS修图,然后再通过阿里云 OSS Browser 客户端手动将图片上传至OSS,供网站访问。

这种方式虽然直观,但在文件数量增多、更新频繁的场景下逐渐暴露出以下问题:

  • 上传操作繁琐,需要人工介入,效率低
  • 容易出现遗漏,缺乏稳定的同步机制
  • 文件同步不具备实时性,影响使用体验

为此,我计划采用一种 自动化、稳定、实时 的方案,将本地目录中的文件实时同步至 OSS。

方案具体是通过将 OSS 挂载为本地目录(ossfs),并结合实时文件监听工具 Lsyncd,可以实现无需人工干预的自动同步,大幅提升效率并降低人为错误。

❓ Lsyncd 是什么

Lsyncd 是一个基于 inotify 或 fsevents 的实时文件同步工具,它监控目录的文件更改并通过 rsync(或其他方式)推送到远程或本地目标,非常适合做:

  • 实时同步目录
  • 适配网络延迟(通过事件聚合)
  • 自动重试失败的同步

PS:相比inotifywait更稳定,更易用。之前也试过inotifywait经常收不到消息。

⏩ 前提条件

  • 一台已配置网络的 Linux 服务器(示例基于 CentOS)
  • 阿里云 OSS 账户及已创建的 Bucket
  • 已获取 AccessKeyIdAccessKeySecret

📦 安装并配置 ossfs

1、执行以下命令,下载安装包。

1
sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.5_centos8.0_x86_64.rpm

PS:更多其他版本下载链接请参考:官方文档

2、执行以下命令,安装 ossfs。

1
sudo yum install -y ossfs_1.91.5_centos8.0_x86_64.rpm

3、执行以下命令,验证 ossfs 是否成功安装。

1
ossfs --version

4、创建并编辑配置文件

  • 配置文件路径:默认配置文件为/etc/passwd-ossfs
  • 配置文件格式$bucket_name:$access_key_id:$access_key_secret
1
2
echo bucket-test-1:AAA:AAA8 > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs

5、挂载 OSS 到本地

1
2
3
4
# 创建挂载目录
mkdir -p /mnt/ossfs
# 执行挂载命令
ossfs -ourl=http://oss-cn-<region>.aliyuncs.com -opasswd_file=/etc/passwd-ossfs [your-bucket-name] /mnt/ossfs

6、验证挂载

1
2
df -h | grep ossfs           # 验证挂载点
ls /mnt/ossfs # 查看Bucket内容

⚙️ 安装并配置 Lsyncd

  1. 安装 Lsyncd
1
2
sudo yum install -y epel-release
sudo yum install -y lsyncd
  1. 创建配置文件
1
sudo vim /etc/lsyncd/lsyncd.conf.lua

示例配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
statusInterval = 10,
nodaemon = false,
maxProcesses = 1,
}

sync {
default.rsync,
source = "【本地共享目录】/",
target = "/mnt/ossfs/",
rsync = {
archive = true,
compress = true,
update = true,
verbose = true,
_extra = {"--delete"}
},
delay = 3,
}
  1. 创建日志目录
1
sudo mkdir -p /var/log/lsyncd
  1. 启动并设置开机启动
1
2
sudo systemctl start lsyncd
sudo systemctl enable lsyncd

✅ 验证同步效果

1、添加测试文件:

1
echo "hello oss" > 【本地共享目录】/test.txt

2、查看目标目录是否生成同步文件:

1
ls /mnt/ossfs/

🧩 总结

通过将阿里云 OSS 挂载为本地文件系统,并使用 Lsyncd 实现实时同步,可以快速搭建一个简单的自动同步方案,避免了每次本地修完图,还要再手动上传到OSS的过程,大大的节省了重复工作,专注于内容生产。