跳到主要内容

🚀 部署脚本

这是用于将 Docusaurus 网站 自动部署到服务器的 Bash 脚本。
脚本功能包括:自动构建、备份旧版本、上传新版本并重载 Caddy 服务。


📂 脚本内容

deploy.sh
#!/bin/bash

# =====================================================
# 🚀 Docusaurus 网站部署脚本(中文化 & 彩色输出)
# =====================================================

# -------------------------
# 📁 本地和远程路径配置
# -------------------------
LOCAL_PROJECT_DIR="/Users/enoch/imenoch" # 本地 Docusaurus 项目路径
LOCAL_BUILD_DIR="$LOCAL_PROJECT_DIR/build" # 构建生成的 build 目录
REMOTE_SERVER="[email protected]" # 远程服务器 SSH
REMOTE_DIR="/var/www/docusaurus" # 远程部署目录
BACKUP_DIR="/root/backup/docusaurus_backup" # 远程备份目录(服务器根目录)
MAX_BACKUPS=50 # 最多保留 50 次备份

# -------------------------
# ⏱️ 记录开始时间
# -------------------------
START_TIME=$(date +%s)

# -------------------------
# 🔹 检查本地项目目录是否存在
# -------------------------
if [ ! -d "$LOCAL_PROJECT_DIR" ]; then
echo -e "❌ 错误:本地项目目录 $LOCAL_PROJECT_DIR 不存在。"
exit 1
fi

# -------------------------
# 🔹 进入项目目录并构建网站
# -------------------------
echo -e "🔹 正在进入项目目录..."
cd "$LOCAL_PROJECT_DIR"

echo -e "🔹 正在构建网站(跳过压缩以加快速度)..."
npm run build -- --no-minify
if [ $? -ne 0 ]; then
echo -e "❌ 构建失败,请检查 Docusaurus 配置或依赖。"
exit 1
fi
echo -e "✅ 构建完成!"

# -------------------------
# 🔹 备份远程现有文件
# -------------------------
echo -e "📦 正在备份服务器文件..."
BACKUP_FILENAME="$BACKUP_DIR/backup_$(date +'%Y%m%d%H%M%S').tar.gz"
ssh "$REMOTE_SERVER" "mkdir -p $BACKUP_DIR && tar -czf $BACKUP_FILENAME -C $REMOTE_DIR ."
if [ $? -ne 0 ]; then
echo -e "❌ 备份失败!"
exit 1
fi
echo -e "✅ 备份完成:$BACKUP_FILENAME"

# -------------------------
# 🔹 清理旧备份
# -------------------------
echo -e "🧹 正在清理旧备份..."
ssh "$REMOTE_SERVER" "
cd $BACKUP_DIR;
ls -t | tail -n +$((MAX_BACKUPS + 1)) | xargs -r rm -f
"
echo -e "✅ 旧备份清理完成"

# -------------------------
# 🔹 上传 build 文件到服务器(中文化 rsync 输出)
# -------------------------
echo -e "🔹 正在上传文件到服务器..."
rsync -avz --delete "$LOCAL_BUILD_DIR/" "$REMOTE_SERVER:$REMOTE_DIR/" | while read line; do
line=${line//building file list ... done/生成文件列表…完成}
line=${line//created directory/已在服务器创建目录}
line=${line//sent/已上传}
line=${line//received/,下载}
line=${line//bytes/字节}
line=${line//speedup is/增量传输加速比}
echo "$line"
done

if [ $? -ne 0 ]; then
echo -e "❌ 上传失败!"
exit 1
fi
echo -e "✅ 上传完成!"

# -------------------------
# 🔹 重新加载 Caddy 服务
# -------------------------
echo -e "🔹 正在重新加载 Caddy 服务..."
ssh "$REMOTE_SERVER" "systemctl reload caddy"
if [ $? -eq 0 ]; then
echo -e "🎉 部署成功!请访问:https://imenoch.327618.xyz/"
else
echo -e "❌ 重新加载 Caddy 服务失败!"
exit 1
fi

# -------------------------
# ⏱️ 计算总耗时
# -------------------------
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo -e "⏱️ 总共耗时:$DURATION 秒"

或在浏览器中访问: https://imenoch.327618.xyz/scripts/deploy.sh