前言
使用 Hugo 构建静态博客后,部署步骤不应成为发布的阻碍。本文提供一个通用 deploy.sh
脚本,支持:
- ✅ SSH 密钥方式(推荐)
- ✅ SSH 密码方式(基础)
- ✅ 自动备份远程旧版本
- ✅ 一键构建并部署 Hugo 项目
一、基础配置项
脚本开头包含以下配置项,根据你实际情况进行修改:
# === 配置项 ===
USER="your_ssh_user" # SSH 用户名
HOST="your_server_ip" # 服务器 IP 或域名
PORT="22" # SSH 端口
REMOTE_DIR="/var/www/html" # 网站部署目录
LOCAL_DIR="public" # Hugo 输出目录
PRODUCTION_URL="https://www.yourname.com" # 你的网站正式地址
二、版本一:使用 SSH 密钥方式(推荐)
1. 生成 SSH 密钥
在本地终端执行:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示选择存储路径(默认 ~/.ssh/id_rsa
),不要设置密码短语(passphrase)可实现无感连接。
2. 将公钥复制到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@your_server_ip
或者手动将 ~/.ssh/id_rsa.pub
内容追加到服务器的 ~/.ssh/authorized_keys
。
3. 完整脚本示例(支持自动备份)
#!/bin/bash
# === 配置项 ===
USER="your_ssh_user"
HOST="your_server_ip"
PORT="22"
REMOTE_DIR="/var/www/html"
LOCAL_DIR="public"
PRODUCTION_URL="https://www.yourname.com"
SSH_KEY="$HOME/.ssh/id_rsa"
ENABLE_BACKUP=true
BACKUP_DIR="/var/www/backup_$(date +%Y%m%d_%H%M%S)"
echo "📦 正在构建 Hugo 博客..."
hugo || { echo "❌ Hugo 构建失败"; exit 1; }
if [ "$ENABLE_BACKUP" = true ]; then
echo "📁 正在备份旧版本..."
ssh -p $PORT -i "$SSH_KEY" $USER@$HOST "cp -r $REMOTE_DIR $BACKUP_DIR"
fi
echo "🚀 开始部署..."
rsync -avz -e "ssh -p $PORT -i $SSH_KEY" --delete $LOCAL_DIR/ $USER@$HOST:$REMOTE_DIR && echo "✅ 部署完成!访问:$PRODUCTION_URL" || echo "❌ 部署失败"
三、版本二:使用 SSH 密码方式(简单)
若不使用 SSH Key,可修改 rsync
命令如下:
rsync -avz -e "ssh -p $PORT" --delete $LOCAL_DIR/ $USER@$HOST:$REMOTE_DIR
每次执行脚本时,会提示你输入服务器密码。注意:此方式安全性较低,不建议用于生产环境。
四、使用方法
无论哪种方式,使用步骤都是:
sh deploy.sh
脚本将自动:
- 构建 Hugo 项目
- 备份远程旧目录(如果启用)
- 上传新内容到服务器
五、额外建议
- 使用 GitHub Actions 实现自动构建部署
- 启用 Nginx gzip 压缩和缓存策略
- 配合 Cloudflare 等 CDN 提升访问速度
结语
部署 Hugo 博客其实并不复杂,通过这套脚本,你可以轻松将内容上线。推荐使用 SSH Key 方式以提升安全性与效率。
如果觉得有帮助,欢迎收藏、转发,让更多人受益!