使用 samba + git 搭建公司内网共享文件服务器

  1. 使用 samba 搭建文件共享服务器
  2. 使用定期执行的 git 脚本,对共享服务器文件进行版本控制
  3. 使用 gitweb 建立文件访问的网页服务,支持直观的误删恢复

samba 搭建共享服务器

在配置共享服务器时,需要保证写入文件后可以删除,可以设置所有读写使用同一个用户的权限进行。在配置文件中体现为force user = nobody

[Public]
path = /mnt/data/samba_public
writable = yes
guest ok = yes
guest only = yes
read only = no
create mode = 0664
directory mode = 0775
force user = nobody
hide dot files = yes # 避免用户看到隐藏文件,如后面的 .git、.gitignore、.backup.sh

使用 git 增量备份共享文件

在 samba 共享目录根目录下,创建.backup.sh文件,使用 git 增量备份对目录中文件的变化。

!/bin/bash
script_path=$(dirname $(readlink -f "${0}"))
cd $script_path
find $script_path -size +3G | sed 's|^./||g' | cat >> .gitignore;
awk '!NF || !seen[$0]++' .gitignore # 不备份大于 3G 的文件,后面的 awk 表示避免重复的行
git add .
git commit -m 'commit changes' -q

在共享目录的根目录下,同时添加.gitignore文件:

.* # 表示忽略对 .gitignore 等隐藏文件的备份

最后,需要在 /etc/crontab 中添加定时对 .backup.sh 的执行:

# 每隔五分钟执行增量备份。不使用 1 分钟是因为没必要,有时候可能先把文件放进去,然后改目录,这时候不必要跟踪得过于频繁
*/5 * * * * nobody bash /mnt/data/samba_public/.backup.sh

使用 gitweb 建立文件访问的网页服务

在使用 git 对目录进行增量备份后,虽然文件已经备份,但是当需要找到历史版本时,需要执行 git 命令,对终端用户来说因为没有相关权限变得不可行。这时,可以借助 git 自带的 gitweb 创建提供用户在线访问的服务。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

使用 logrotate 定期分割日志文件
Previous post
使用 ffmpeg 常用命令 + cuda
Next post