vps折腾日记

折腾进行时ing

博主纯小白, 所以大部分时候都在和ai对话执行操作
纯记录向

同步更新博客

Hexo

饺子醋这一块
因为买了vps自然就要买域名,所以听友人的去spaceship淘了一个数字域名和icu, 一个用来内部七七八八的服务, 一个用来对外的博客和以后瞎折腾的小东西

总之想和别人一样把博客绑定到自己的域名上,虽然github提供了直接自定义域名的方法, 反正不酷.jpg, 最后搜了下有个利用github的webhook的方式, 效果就是本地hexo d后github检测到push和vps说一声, 然后那边自动拉取最新的博客

总之先是安装下webhook
后面的脚本基本是和ai问的了

1
2
sudo apt update
sudo apt install -y webhook

因为用的是面板一键操作的, 建站证书都一键了, 没学到啥 接着去网站根目录下git init一下, 顺便设置remote origin为自己的博客仓库
在写两个脚本, 分别对应监听github的hook和执行脚本

执行脚本deploy-blog.sh

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
#!/bin/bash

# ===== 博客自动部署脚本 =====
# 作用:当 GitHub 推送代码后,自动更新服务器上的博客文件

# 定义变量(请根据你的实际情况修改)
BLOG_DIR="博客存放目录" # 你的博客静态文件存放目录(重要!)
LOG_FILE="log存放目录"

# 开始部署
echo "$(date): 博客部署开始" >> $LOG_FILE

# 进入博客目录
cd $BLOG_DIR || {
echo "$(date): 错误:无法进入目录 $BLOG_DIR" >> $LOG_FILE
exit 1
}

# 拉取最新代码(假设你的博客是通过 Git 管理的)
git pull origin main>> $LOG_FILE 2>&1

# 如果你的博客需要生成(比如 Hexo 在服务器端生成),取消下面两行的注释
# npm install >> $LOG_FILE 2>&1
# npx hexo generate >> $LOG_FILE 2>&1

echo "$(date): 博客部署完成" >> $LOG_FILE

监听配置文件webhook.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[
{
"id": "deploy-blog",
"execute-command": "/opt/webhook-scripts/deploy-blog.sh",
"command-working-directory": "/opt/webhook-scripts",
"response-message": "博客部署任务已触发",
"trigger-rule": {
"match": {
"type": "payload-hmac-sha256",
"secret": "一个密码,在github webhook要用到",
"parameter": {
"source": "header",
"name": "X-Hub-Signature-256"
}
}
}
}
]

接着创建一个service作为系统服务一直运行

1
sudo nano /etc/systemd/system/webhook.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Webhook 监听服务
After=network.target

[Service]
ExecStart=/usr/bin/webhook -hooks /etc/webhook/hooks.json -port xxxx -verbose
Restart=always
User=root

[Install]
WantedBy=multi-user.target

然后启动服务四件套

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl enable webhook
sudo systemctl start webhook
sudo systemctl status webhook

然后反代下webhook的服务, 接着去github对应的仓库的setting里找webhook
Payload填自己的webhook地址 xxxxx/hooks/xxxx.sh(对应仓库的执行sh) 密码填之前json里对应的密码
type博主用的是x-www, 反正ai是这么说的

这样一般就好了, 首次设置好github的部分会自动ping一下, 左边打勾了就行, 如果没有就看下github的日志是不是url写错了
或者去vps上看看log sudo tail -f 前面写的log地址, 一般都是没有设置好git或者是没有设置remote origin

博主踩坑的点就是没有设置好git和remote origin, 一般这样就好了 反正是问的ai脚本还在学习

之后同步更新其他仓库就是复制下执行脚本, 然后json里也复制一遍改下id和密码就好了
不过应该不局限于更新博客, 以后再折腾别的

Mkdocs

博主还有个笔记站, 使用的Material for MkDocs, 但是通过github的ci进行部署的
总之是通过在ci里加上构建产物scp到vps就行

这个反正是公开的
前半是官方的yml文件, 后面部署vps是问ai写的

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
70
71
72
73
74
75
76
name: ci

on:
push:
branches:
- master
- main

permissions:
contents: write

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Configure Git Credentials (for gh-deploy)
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: 3.x

- name: Set cache ID
run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV

- name: Cache dependencies
uses: actions/cache@v4
with:
key: mkdocs-material-${{ env.cache_id }}
path: .cache
restore-keys: |
mkdocs-material-

- name: Install dependencies
run: |
pip install mkdocs-material
pip install mkdocs-awesome-nav

# ===== 新增部分开始 =====
# 显式构建网站,生成 site/ 目录
- name: Build MkDocs site
run: mkdocs build

- name: Test SSH connection
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
script: |
echo "SSH connection successful"
ls -ld ${{ secrets.VPS_TARGET_PATH }}

# 将 site/ 目录通过 SCP 传输到 VPS
- name: Deploy to VPS via SCP
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
source: "site/"
target: ${{ secrets.VPS_TARGET_PATH }}
strip_components: 1 # 去掉 site/ 前缀,直接把里面的文件放进目标目录
# ===== 新增部分结束 =====

# 原有的部署到 GitHub Pages(会再次构建,但没关系)
- name: Deploy to GitHub Pages
run: mkdocs gh-deploy --force

只需要在自己的vps上建个专门用于github action去scp的用户就好了, 剩下secrets的内容都是去Settings → Secrets and variables → Actions自己填的

这么看用action还方便不少


vps折腾日记
http://frenchpicnic.github.io/posts/91fabc8c/
作者
FrenchPicnic
发布于
2026年3月4日
许可协议