侧边栏壁纸
博主头像
一揽芳华 博主等级

行动起来,活在当下

  • 累计撰写 265 篇文章
  • 累计创建 24 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

ubuntu22.04 对接腾云对象存储,实现halo站点数据自动备份

芳华是个男孩!
2024-11-18 / 0 评论 / 1 点赞 / 43 阅读 / 0 字
广告 广告

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、提前准备

<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 否则可能不成功。
1
广告 广告

评论区