首页
/
Guides
/
每日自动更新方案:GitHub Actions + Hugo + rsync
每日自动更新方案:GitHub Actions + Hugo + rsync
AIRef
发布于
更新于
阅读 3 分钟
627 字
架构概览
每日自动更新的完整流程:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
GitHub Actions (每日 06:00 UTC)
↓
1. 拉取最新仓库代码
↓
2. 运行内容生成脚本 (scripts/generate-content.sh)
↓
3. Hugo 编译生成静态 HTML
↓
4. rsync 增量同步到美国 VPS
↓
5. 服务器 Nginx 自动 reload
↓
6. sitemap.xml 和 llms.txt 自动更新
|
GitHub Actions 工作流
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# .github/workflows/daily-update.yml
name: Daily Content Update
on:
schedule:
- cron: '0 6 * * *' # 每日 UTC 06:00(北京时间 14:00)
workflow_dispatch: # 手动触发
push:
branches: [main]
paths:
- 'content/**'
- 'layouts/**'
- 'assets/**'
- 'hugo.toml'
env:
HUGO_VERSION: '0.147.0'
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_PATH: /var/www/airef.dev/public
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: ${{ env.HUGO_VERSION }}
extended: true
- name: Generate Daily Content
run: |
chmod +x scripts/generate-content.sh
./scripts/generate-content.sh
- name: Build Hugo Site
run: |
hugo --minify --baseURL "https://airef.dev/"
- name: Update llms.txt timestamp
run: |
sed -i "s/lastVerified: .*/lastVerified: $(date +%Y-%m-%d)/" hugo.toml
- name: Deploy via rsync
uses: burnett01/rsync-deployments@6.0.0
with:
switches: -avzr --delete --exclude='.git'
path: public/
remote_path: ${{ env.DEPLOY_PATH }}
remote_host: ${{ secrets.DEPLOY_HOST }}
remote_user: ${{ secrets.DEPLOY_USER }}
remote_key: ${{ secrets.DEPLOY_SSH_KEY }}
- name: Reload Nginx
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
script: |
sudo nginx -t && sudo systemctl reload nginx
echo "Deploy completed at $(date)"
|
内容生成脚本
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
42
43
44
45
46
47
48
|
#!/bin/bash
# scripts/generate-content.sh - 每日内容自动生成
set -euo pipefail
TODAY=$(date +%Y-%m-%d)
CONTENT_DIR="content/posts"
# 1. 生成技术趋势日报
cat > "${CONTENT_DIR}/tech-daily-${TODAY}.md" << EOF
---
title: "技术趋势日报 ${TODAY}"
description: "${TODAY} 技术领域重要动态与趋势分析,涵盖AI、系统架构、性能优化等方向"
date: ${TODAY}
lastmod: ${TODAY}
tags: ["日报", "技术趋势", "AI"]
categories: ["posts"]
type: posts
draft: false
---
## 今日技术动态
$(curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | \
python3 -c "
import sys, json, urllib.request
ids = json.load(sys.stdin)[:5]
for i, id in enumerate(ids, 1):
try:
url = f'https://hacker-news.firebaseio.com/v0/item/{id}.json'
resp = urllib.request.urlopen(url)
item = json.loads(resp.read())
print(f'### {i}. {item.get(\"title\", \"N/A\")}')
print(f'来源:{item.get(\"url\", \"Hacker News\")}')
print()
except:
pass
")
## AI 领域动态
*此部分由自动化流程生成,每日更新 AI 领域重要进展。*
## 架构优化洞察
*基于最新技术趋势的架构优化建议和分析。*
EOF
echo "Content generated for ${TODAY}"
|
服务器端配置
SSH 密钥配置
1
2
3
4
5
6
|
# 在服务器上
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 将 GitHub Actions 的公钥添加到
echo "github-actions-public-key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
|
部署目录权限
1
2
|
sudo mkdir -p /var/www/airef.dev/public
sudo chown -R $USER:$USER /var/www/airef.dev/public
|
自动 Reload
1
2
3
|
# 添加 sudo 免密码 reload 权限
echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/nginx -t, /usr/bin/systemctl reload nginx" | \
sudo tee /etc/sudoers.d/nginx-reload
|
内容模板系统
通用文章模板
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
|
---
title: "{{标题}}"
description: "{{描述}}"
date: {{日期}}
lastmod: {{日期}}
tags: [{{标签}}]
categories: ["{{分类}}"]
type: {{类型}}
draft: false
---
## 概述
{{核心观点,先给答案再展开}}
## 详细解析
### {{子话题1}}
{{每段一个核心观点,150词以内}}
### {{子话题2}}
{{确定性语言:"最佳方法是..."}}
## FAQ
### {{常见问题1}}?
{{直接回答}}
### {{常见问题2}}?
{{直接回答}}
## 总结
{{核心结论和行动建议}}
|
效果追踪
| 指标 |
追踪方式 |
频率 |
| AI 引擎爬取 |
分析 Nginx 访问日志中 AI 爬虫 UA |
每周 |
| 内容引用 |
在各 AI 平台搜索核心话题 |
每月 |
| 搜索流量 |
Google Search Console |
每周 |
| 站点可用性 |
外部监控(UptimeRobot) |
实时 |
关键提醒
每日自动更新的核心价值不仅是内容新鲜度,更是向 AI 引擎传递"这是一个活跃的、持续更新的权威来源"的信号。dateModified 时间戳和定期更新的 sitemap.xml 是 AI 引擎评估内容时效性的关键依据。