前言

我知道很多大佬都用Github的Action构建推送 应对一些博客文档脚本确实很方便 我也在用
之所以会用到这个脚本是因为hugo构建大型相册 原文件+构建好的图片 都超过10个G 推送到github非常不方便
想到action推送到远程服务器也是通过rsync 本地脚本暴露ssh密码也不影响什么 相对来说也足够安全
而我还有72小时开机的高性能服务器 确实没必要占用Github和Vercel的资源
以下脚本脚本实现起来非常简单 已经测试了可行性

安装Rsync

本地跟远程服务器都要安装rsync 不然会同步失败

MacOs安装Rsync

brew install rsync

Debian安装Rsync

apt install rsync

安装 sshpass

通过密码登陆需要这个方法 本地安装就行了

  • Debian/Ubuntu:

    sudo apt-get install sshpass
  • macOS(使用 Homebrew):

    brew install sshpass

创建 deploy.sh 脚本

在你的项目根目录下,创建 deploy.sh 脚本,内容如下:

#!/bin/bash
REMOTE_USER="root"登陆用户名 一般是root
REMOTE_HOST="your_ip"# 远程IP
REMOTE_PATH="/www/wwwroot/gallery.darklotus.cn/public/"  # 修改为你的远程路径
REMOTE_PASSWORD="your_password"  # 这里输入你的密码
REMOTE_PORT=22  # 自定义端口

# 定义本地同步的目录
LOCAL_DIR="public/"  # 本地目录

# 使用 sshpass 和 rsync 同步文件,指定自定义端口
sshpass -p "$REMOTE_PASSWORD" /usr/bin/rsync -avz -e "ssh -p $REMOTE_PORT -o StrictHostKeyChecking=no" --delete "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"

推送多个远程服务器

#!/bin/bash

# 定义本地同步的目录
LOCAL_DIR="public/"  # 本地目录

# 定义远程服务器的信息
REMOTE_SERVERS=(
    "192.168.1.1 user1 password1 2222"  # 服务器1的 IP、用户名、密码和端口
    "192.168.1.2 user2 password2 2200"  # 服务器2的 IP、用户名、密码和端口
)

# 定义远程路径
REMOTE_PATH="/www/wwwroot/gallery.darklotus.cn/public/"  # 修改为你的远程路径

# 遍历每个远程服务器并执行 rsync
for SERVER in "${REMOTE_SERVERS[@]}"; do
    # 解析服务器信息
    IFS=' ' read -r REMOTE_HOST REMOTE_USER REMOTE_PASSWORD REMOTE_PORT <<< "$SERVER"
    
    echo "正在同步到 $REMOTE_HOST ..."
    sshpass -p "$REMOTE_PASSWORD" /usr/bin/rsync -avz -e "ssh -p $REMOTE_PORT -o StrictHostKeyChecking=no" --delete "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
    
    if [ $? -eq 0 ]; then
        echo "同步到 $REMOTE_HOST 成功!"
    else
        echo "同步到 $REMOTE_HOST 失败!"
    fi
done

设置脚本权限

确保脚本具有可执行权限。你可以在终端中运行以下命令:

chmod +x deploy.sh

步骤 4:运行脚本

每次你想要构建并同步文件时,只需在终端中运行以下命令:

./deploy.sh
最后修改:2024 年 12 月 06 日
如果觉得我的文章对你有用,请随意赞赏