BOSh
文章272
标签408
分类100
315晚会 36氪 80后 ADB AI AI Agent AI PC AI 代理 AI 助手 AI 网关 AI 评测 AI助手 AI大模型 AI安全 AI应用 AI智能体 AI网关 API API 集成 AWS Agent Agentic AI AionUi Android Apple Automation Backup Bosh C++ CDN CEO CI/CD CLI CLI Proxy API CLIProxyAPI CRM Chrome 插件 Claude Opus 4.6 Cloudflare ConnectBot Credential Manager CurrentEvents DNS Debian DeepSeek DenchClaw DevOps Docker Elon Musk GCP GEO GPL GPS GPU Gemini Gemini 3.1 Pro Ghostty GitHub GitHub Actions Gmail Gog Google Google AI Pro Google API Google Gemini Google Photos Google Pixel HKUDS Hardware Hermes Hermes Agent Hexo HidenCloud Hugo IPV6 Jetpack Compose John Turnus Karpathy Kimi-K2.5 Kotlin LINUX LTS LaTeX Linux Markdow Markdown MemU Bot MiniMax Musk NAT64 NIX NODE NVIDIA Build NanoClaw Netcatty Netlify Newsletter Open WebUI OpenAI OpenAI 兼容接口 OpenCLI OpenClaw PDF 编译 PicoClaw Pixel Pixel 1 Pixel 12 Prismer Pura90 Python QClaw QQ机器人 RAG Reddit Rust SFTP SSH Skills SoC Subagent SuperCall Syncthing TPU TSMC Telegram Bot Tensor Tensor G7 Tim Cook Ubuntu VLESS VPS Vercel WeChat Web3 WebSSH Windows WorkBuddy X XChat XHTTP X热榜 YouTube ZeroClaw arXiv arch c++ git hugo iMessage iOS n8n nanobot node js ntfs pacman podman zz.ac 东海 两性关系 个人助理 中东 中东冲突 中东局势 中关村论坛 中南大学 中国 中美 习惯养成 云同步 云服务器 亚洲 人性 代理 代金券 以色列 任务管理 伊朗 伊朗危机 伊朗战争 伦理 体育 保护主义 信息流 信息管理 停火 健康管理 光通信 免费VPS 免费试用 共和党 关系 养老金 内容工厂 内容生产 内容筛选 军事冲突 军事动态 军民融合 农村 分享 分配 创业 办公自动化 加密 加密货币 加沙 北斗 医学生 半导体 华为 博客 博客助手 博客发布 博客部署成功 卫星 原生 JS 反思 反重力 台海局势 台湾 命令 命令行 喷嚏网 国产 国产化 国产替代 国际 国际关系 国际局势 国际新闻 图卦 图说 地缘政治 基础设施 多代理 多模态AI 大学分析 大模型 孙少平 学习 安全 实时监控 家庭助理 家庭服务器 家装设计 工作总结 工作效率 工作流编排 工具链 平凡的世界 平台责任 庞氏骗局 开发 开发实录 开源 开源项目 张雪峰 微信 心理健康 情感 战争 房地产 手机 技术分享 投资工具 指标看板 提示词工程 播客 收件箱清理 效率 效率工具 教程 教育制度 数据分析 数据投毒 文件管理 文献管理 新能源汽车 新闻汇总 日历聚合 时事 时事总结 显卡 晨报 智能体 智能体生态 朝鲜 架构 架构实践 核协议 核武器 桌面Cowork 模型接入 模型配置 每日图说 比亚迪 油价 法律 活动运营 浏览器自动化 消息通道 消费者权益 深度学习 渔船 游戏开发 湘雅医院 潘石屹 热点新闻 版本更新 特朗普 生态系统 生活 生活自动化 生物识别 用例 甲骨文云 电池技术 症状追踪 白嫖攻略 白山云 皮皮虾 监管 目标管理 知识库 社交媒体 社会保障 社会公平 社会百态 社会观察 科技 科研助手 笔记 第一财经 算法 算法推荐 纽森 经济 经济观察 经验分享 编程 网关 网络 网络安全 美伊冲突 美伊谈判 美国 美国大选 美国政治 能源安全 脚本 腾讯 腾讯,龙虾,OpenClaw 腾讯云 自动化 自动化创作 自动化协作 自动化提醒 自动化流水线 自动化脚本 自动化运维 自律教练 自由软件 芯片 行为改变 视频摘要 解锁 计算摄影 记录 许可证 论文写作 论文阅读 语义搜索 语音代理 读书 读书笔记 读后感 谷歌云 财报季 路遥 身份验证 迁移 运维 进化论 远程运维 选车 邀请确认 部署 部署指南 量子计算 销售自动化 阅读感悟 随笔 隐私 霍尔木兹 霍尔木兹海峡 韬定律 项目管理 风险管理 飞书 高中生活 高可用 高考 高考志愿 鸽巢原理 麒麟 麒麟9050 黎巴嫩 龙虾

一言

文章归档

Hugo 博客自动化部署:从 GitHub Actions 到 VPS 的保姆级指南

Hugo 博客自动化部署:从 GitHub Actions 到 VPS 的保姆级指南

手动部署博客?这简直是石器时代的行为。既然我们已经把代码托管在 GitHub,那么最优雅的方案就是构建一套 CI/CD 流水线:只要 git push,代码自动构建并同步到 VPS。

今天分享一套经过验证的 Hugo -> GitHub Actions -> VPS 自动化方案。

核心链路

整个流程分为三个关键环节:VPS 密钥配置 -> GitHub Secrets 加密 -> Workflow 编排


第一步:在 VPS 上配置 SSH 免密登录

GitHub Actions 需要一个「通行证」才能在不输入密码的情况下把文件传到你的服务器。

  1. 生成 SSH 密钥对(如果已有可跳过):

    1
    ssh-keygen -t ed25519 -C "github-actions-hugo"

    注意:一路回车,不要设置 passphrase。

  2. 将公钥加入信任列表

    1
    2
    3
    cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
  3. 导出私钥(这是后面要填入 GitHub 的关键):

    1
    cat ~/.ssh/id_ed25519

    复制包含 -----BEGIN OPENSSH PRIVATE KEY----- 在内的全部内容。

第二步:在 GitHub 中配置 Secrets

绝对不要把服务器 IP 和私钥明文写在 .yml 文件里,那是给黑客递钥匙。

进入仓库 -> Settings -> Secrets and variables -> Actions,点击 New repository secret 添加以下三个变量:

Secret 名称 内容示例 说明
VPS_SSH_KEY -----BEGIN OPENSSH... 刚才复制的私钥全文
VPS_HOST 1.2.3.4 VPS 的公网 IP
VPS_USER root 登录用户名

第三步:编写 Workflow 配置文件

在项目根目录下创建 .github/workflows/deploy.yml,直接贴入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
name: Deploy Hugo Blog to VPS

on:
push:
branches:
- main # 触发分支,如果是 master 请相应修改

jobs:
deploy:
runs-on: ubuntu-latest

steps:
# 1. 检出代码 (处理子模块是关键)
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0

# 2. 安装 Hugo 环境 (开启 extended 版本支持 SCSS)
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: 'latest'
extended: true

# 3. 构建静态文件
- name: Build Blog
run: hugo --minify

# 4. 通过 SSH 部署到 VPS
- name: Deploy to VPS
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.VPS_SSH_KEY }}
ARGS: "-avzr --delete"
SOURCE: "public/"
REMOTE_HOST: ${{ secrets.VPS_HOST }}
REMOTE_USER: ${{ secrets.VPS_USER }}
REMOTE_PORT: "22" # 根据你的 SSH 端口修改
TARGET: "/var/www/hugoblg"

⚠️ Bosh 的避坑指南 (Critical Tips)

  1. env 还是 with
    很多教程会把 SSH_PRIVATE_KEY 写在 with: 下面,但在 easingthemes/ssh-deploy 插件中,这些参数必须写在 env: 块中,否则会直接报 SSH_PRIVATE_KEY is mandatory

  2. 目录权限与存在性
    GitHub Actions 不会自动帮你创建远程目录。请确保 VPS 上 /var/www/hugoblg 已经存在,且 VPS_USER 拥有写入权限。

    1
    mkdir -p /var/www/hugoblg
  3. 主题子模块 (Submodules)
    如果你的 Hugo 主题是通过 git submodule add 引入的,checkout 步骤中的 submodules: recursive 必须开启,否则构建出的页面将没有样式。

第四步:验证与生效

本地推送即可触发:

1
2
3
git add .
git commit -m "chore: setup github actions deploy"
git push origin main

打开 GitHub 仓库的 Actions 标签页,看着那个绿色的对勾出现,你就知道可以关掉电脑去喝咖啡了。 ☕️


本文由 BOSH 的博客助手 HerMes 整理 ⚡️

本文作者:BOSh
本文链接:http://bosh.zz.ac/posts/654136171.html
版权声明:本文由BoSh发布,部分内容来源于网络。