1、系统环境
root@www:~# hostnamectl
Static hostname: www
Icon name: computer-vm
Chassis: vm
Machine ID: ac246abd04485f3437d24d6ca450bad0
Boot ID: e1f1342c04784637a98dc303d762d7fc
Virtualization: kvm
Operating System: Ubuntu 22.04 LTS
Kernel: Linux 5.15.0-30-generic
Architecture: x86-64
2、提前准备
- 安装包:cosfs_1.0.21-ubuntu20.04_amd64.deb
- 腾讯云对象存储相关参数:BucketName-APPID : SecretId : SecretKey
<BucketName-APPID>
:存储桶名称;
<SecretId>、<SecretKey>
:密钥信息(在云密钥管理中创建);
<Region>
: 区域
3、开始部署
(1)更新源、安装cosfs相关依赖
sudo apt update -y
sudo apt install libfuse2
sudo apt install libssl-dev
sudo ln -s /snap/core20/1434/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
sudo wget https://github.com/tencentyun/cosfs/releases/download/v1.0.21/cosfs_1.0.21-ubuntu20.04_amd64.deb
sudo dpkg -i cosfs_1.0.21-ubuntu20.04_amd64.deb
(2)配置存储目录
这里以我的环境为例,我部署了halo站点
## 源文件目录 /www/halo/halo2/backups
## oss挂载目录 /www/halo/oss
## 解释:在halo站点后台点击备份后,会自动在/www/halo/halo2/backups目录中压缩一个zip格式压缩包,里面是网站的全部数据。我希望当/www/halo/halo2/backups存在新文件的时候,自动将新文件复制到腾讯云oss挂载的/www/halo/oss目录下。从而实现自动上传到腾讯云的oss中。
(3)配置腾讯云OSS
## 参数解释对应第2条,查找自己的腾讯云oss配置
sudo echo <BucketName-APPID>:<SecretId>:<SecretKey> > /etc/passwd-cosfs
sudo cat /etc/passwd-cosfs
sudo chmod 640 /etc/passwd-cosfs
## 下面重点挂载命令
# <BucketName-APPID>:存储桶名称
# <MountPoint>:本地挂载目录
# <Region>:区域,详见你的存储桶信息
sudo cosfs <BucketName-APPID> <MountPoint> -ourl=https://cos.<Region>.myqcloud.com -odbglevel=info -oallow_other
(4)验证挂载
## 使用df命令查看本地挂载
root@www:~# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 796M 1.2M 794M 1% /run
/dev/vda1 80G 6.9G 73G 9% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda15 105M 5.3M 100M 5% /boot/efi
tmpfs 796M 4.0K 796M 1% /run/user/0
overlay 80G 6.9G 73G 9% /var/lib/docker/overlay2/0e073b953cf775767a2e55afb835ad2450b7d0e3facb82b015975c51b0726330/merged
overlay 80G 6.9G 73G 9% /var/lib/docker/overlay2/2fd7c77edaad2ec37f97dc30b949c3f272241b5e59ab5bcf4764e2ae31073874/merged
cosfs 256T 0 256T 0% /www/halo/oss
## 在/www/halo/oss中写入一个文件。看会不会自动同步到腾讯云的oss中
root@www:/www/halo/oss# touch 20241118-cs.tzt
root@www:/www/halo/oss# ls
20241117214823-backup-pxvJs.zip 20241117221229-backup-aPyWE.zip 20241118-cs.tzt cs.txt
root@www:/www/halo/oss#
腾讯云oss中查看
验证成功后清除掉所有文件,源文件夹、备份文件夹中都留空
(5)测试配置自动备份
使用脚本实现
## 1、安装文件检测工具,inotifywait 是一个 Linux 命令行工具,用于监控文件系统事件。它是 inotify(一个内核特性)的用户空间接口,可以实时监测文件和目录的变化。
sudo apt-get install inotify-tools
## 2、新建记录文件
sudo touch oss.txt
## 3、创建脚本,脚本内容如下
cat <<'EOF'> oss.sh
#!/bin/bash
# 定义源目录和目标目录
SOURCE_DIR="/www/halo/halo2/backups/"
TARGET_DIR="/www/halo/oss/"
LOG_FILE="./oss.txt"
# 使用 inotifywait 监控目录
while true; do
NEW_FILE=$(inotifywait -r -e create --format '%w%f' "$SOURCE_DIR")
# 等待文件完成写入
sleep 15 # 等待15秒钟,确保文件写入完成
# 检查源文件是否存在
if [ -f "$NEW_FILE" ]; then
# 复制文件到目标目录
cp "$NEW_FILE" "$TARGET_DIR"
# 记录同步信息到日志文件
echo "Copied: $NEW_FILE to $TARGET_DIR at $(date)" >> "$LOG_FILE"
# 检查文件大小
SOURCE_SIZE=$(stat -c%s "$NEW_FILE")
TARGET_SIZE=$(stat -c%s "$TARGET_DIR/$(basename "$NEW_FILE")")
if [ "$SOURCE_SIZE" -eq "$TARGET_SIZE" ]; then
echo "File copied successfully and sizes match." >> "$LOG_FILE"
else
echo "Warning: File sizes do not match. Source: $SOURCE_SIZE, Target: $TARGET_SIZE" >> "$LOG_FILE"
fi
else
echo "File not found: $NEW_FILE" >> "$LOG_FILE"
fi
done
EOF
## 4、设置脚本权限
sudo chmod +x oss.sh
## 5、执行
sudo ./oss.sh
## 6、登录holo控制创建备份。等待15秒钟后验证,检查自动同步情况
### 查看halo备份文件
root@www:/www/halo# ll halo2/backups/
total 98348
drwxr-xr-x 2 root root 4096 Nov 18 08:38 ./
drwxr-xr-x 9 root root 4096 Oct 28 02:40 ../
-rw-r--r-- 1 root root 50345250 Nov 18 08:31 20241118163139-backup-maRqE.zip
-rw-r--r-- 1 root root 50347588 Nov 18 08:38 20241118163847-backup-AFMlV.zip
### 查看对象存储挂载路径文件
root@www:/www/halo# ll oss/
total 98338
drwxrwxrwx 1 root root 0 Jan 1 1970 ./
drwxr-xr-x 8 root root 4096 Nov 18 08:37 ../
-rw-r--r-- 1 root root 50345250 Nov 18 08:31 20241118163139-backup-maRqE.zip
-rw-r--r-- 1 root root 50347588 Nov 18 08:39 20241118163847-backup-AFMlV.zip
### 查看写入日志
root@www:/www/halo# cat oss.txt
Copied: /www/halo/halo2/backups/20241118163139-backup-maRqE.zip to /www/halo/oss/ at Mon Nov 18 08:32:00 UTC 2024
File copied successfully and sizes match.
Copied: /www/halo/halo2/backups/20241118163847-backup-AFMlV.zip to /www/halo/oss/ at Mon Nov 18 08:39:36 UTC 2024
File copied successfully and sizes match.
## 查看错误日志
root@www:/www/halo# cat oss_error.log
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
查看腾讯云oss上是否同步成功
结束掉脚本运行、oss挂载,后面通过systemctl来启动以及通过fstab来开机挂载
kill -9 <脚本的运行进程号> ## 通过ps -ef 获取
fuser -m /www/halo/oss/ ## 获取查看oss挂载进程号,并使用kill结束掉
fusermount -u /www/halo/oss ## 取消挂载
(6)创建开机自启动脚本文件
## 创建systemctl启动脚本文件
cat <<EOF> /etc/systemd/system/oss.service
[Unit]
Description=OSS File Sync Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/nohup /www/halo/oss.sh &
WorkingDirectory=/www/halo
StandardOutput=file:/www/halo/oss.log
StandardError=file:/www/halo/oss_error.log
Restart=always
[Install]
WantedBy=multi-user.target
EOF
## 配置开机自启并运行
systemctl enable --now oss.service
Created symlink /etc/systemd/system/multi-user.target.wants/oss.service → /etc/systemd/system/oss.service.
## 检查运行情况
systemctl status oss.service
● oss.service - OSS File Sync Service
Loaded: loaded (/etc/systemd/system/oss.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-11-18 08:37:46 UTC; 6s ago
Main PID: 7337 (oss.sh)
Tasks: 2 (limit: 9477)
Memory: 608.0K
CPU: 4ms
CGroup: /system.slice/oss.service
├─7337 /bin/bash /www/halo/oss.sh "&"
└─7338 inotifywait -r -e create --format %w%f /www/halo/halo2/backups/
Nov 18 08:37:46 www systemd[1]: Started OSS File Sync Service.
(7)配置对像存储开启自动挂载
## 配置fstab文件
echo "www-1257845304 /www/halo/oss fuse.cosfs _netdev,allow_other,url=https://cos.ap-guangzhou.myqcloud.com 0 0" >> /etc/fstab
mount -a
## 查看fstab文件
cat /etc/fstab
LABEL=cloudimg-rootfs / ext4 discard,errors=remount-ro 0 1
LABEL=UEFI /boot/efi vfat umask=0077 0 1
www-1257845304 /www/halo/oss fuse.cosfs _netdev,allow_other,url=https://cos.ap-guangzhou.myqcloud.com 0 0 ## 看到这一条表示成功
## 验证系统中挂载情况
df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 794M 1.2M 793M 1% /run
/dev/vda1 78G 4.8G 73G 7% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda15 105M 6.1M 99M 6% /boot/efi
tmpfs 794M 4.0K 794M 1% /run/user/0
overlay 78G 4.8G 73G 7% /var/lib/docker/overlay2/0e073b953cf775767a2e55afb835ad2450b7d0e3facb82b015975c51b0726330/merged
overlay 78G 4.8G 73G 7% /var/lib/docker/overlay2/2fd7c77edaad2ec37f97dc30b949c3f272241b5e59ab5bcf4764e2ae31073874/merged
cosfs 256T 0 256T 0% /www/halo/oss ## 看到这一条表示成功
(8)再次测试验证
在halo后台备份文件
在终端查看
## 查看halo的备份文件路径
root@www:~# ll /www/halo/halo2/backups/
total 147520
drwxr-xr-x 2 root root 4096 Nov 18 08:51 ./
drwxr-xr-x 9 root root 4096 Oct 28 02:40 ../
-rw-r--r-- 1 root root 50345250 Nov 18 08:31 20241118163139-backup-maRqE.zip
-rw-r--r-- 1 root root 50347588 Nov 18 08:38 20241118163847-backup-AFMlV.zip
-rw-r--r-- 1 root root 50347669 Nov 18 08:51 20241118165145-backup-wOWQk.zip
## 查看oss的挂载路径
root@www:~# ll /www/halo/oss
total 147506
drwxrwxrwx 1 root root 0 Jan 1 1970 ./
drwxr-xr-x 8 root root 4096 Nov 18 08:37 ../
-rw-r--r-- 1 root root 50345250 Nov 18 08:31 20241118163139-backup-maRqE.zip
-rw-r--r-- 1 root root 50347588 Nov 18 08:39 20241118163847-backup-AFMlV.zip
-w-r--r-- 1 root root 50347669 Nov 18 08:52 20241118165145-backup-wOWQk.zip
## 查看写入日志
root@www:~# cat /www/halo/oss.txt
Copied: /www/halo/halo2/backups/20241118163139-backup-maRqE.zip to /www/halo/oss/ at Mon Nov 18 08:32:00 UTC 2024
File copied successfully and sizes match.
Copied: /www/halo/halo2/backups/20241118163847-backup-AFMlV.zip to /www/halo/oss/ at Mon Nov 18 08:39:36 UTC 2024
File copied successfully and sizes match.
Copied: /www/halo/halo2/backups/20241118165145-backup-wOWQk.zip to /www/halo/oss/ at Mon Nov 18 08:52:11 UTC 2024
File copied successfully and sizes match.
在腾讯云对象存储中查看
(9)可能问题
- 如果有云服务器安全策略,请放行端口:TCP 443、TCP 53、UDP 53 否则可能不成功。
评论区