前言

使用 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 方式以提升安全性与效率。

如果觉得有帮助,欢迎收藏、转发,让更多人受益!