574 字
3 分钟

通过GitAction自动部署Blog到家庭服务器

概述#

服务器网络拓扑图大概为:
云服务器-frps → PVE-OpenWrt-frpc → PVE-OpenWrt-nginx → PVE-Ubuntu


具体操作#

复制一份并修改Firefly主题自带的deploy.yml#

.github/workflows/rsync-deploy.yml
name: Deploy to Pages Branch
name: Deploy to Home Server
on:
# 每次推送到 `master` 分支时触发这个"工作流程"
# 如果你使用了别的分支名,请按需将 `master` 替换成你的分支名
push:
branches: [ master ]
# 允许你在 GitHub 上的 Actions 标签中手动触发此"工作流程"
workflow_dispatch:
# 需要写入权限来推送到pages分支
permissions:
contents: write
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout your repository using git
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.14.4
run_install: false
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
- name: Build site
run: pnpm run build
- name: Create .nojekyll file
run: touch dist/.nojekyll
- name: Deploy to pages branch
uses: JamesIves/github-pages-deploy-action@v4
with:
branch: pages # 部署到pages分支
folder: dist # Astro默认构建输出目录
clean: true # 清理目标分支中的旧文件
- name: Deploy to home server
uses: burnett01/rsync-deployments@v8
with:
switches: -avzr --delete
path: dist/
remote_path: ${{ secrets.REMOTE_PATH }} # ex: /var/www/html/
remote_host: ${{ secrets.REMOTE_HOST }} # ex: example.com
remote_port: ${{ secrets.REMOTE_PORT }} # ex: 22
remote_user: ${{ secrets.REMOTE_USER }} # ex: ubuntu
remote_key: ${{ secrets.REMOTE_PRIVATE_KEY }}

配置Ubuntu#

1. 创建一个受限的新用户专门用于部署#

Terminal window
su root #切换为root
adduser --comment "Blog-Deployer" blogdeploy
# output
info: Adding user `blogdeploy' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `blogdeploy' (1001) ...
info: Adding new user `blogdeploy' (1001) with group `blogdeploy (1001)' ...
info: Creating home directory `/home/blogdeploy' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
info: Adding new user `blogdeploy' to supplemental / extra groups `users' ...
info: Adding user `blogdeploy' to group `users' ...

2. 创建blog专用的目录#

Terminal window
mkdir -p /var/www/blog
chown -chR blogdeploy:blogdeploy /var/www/blog
ls -l /var/www
chmod +x /var/www/blog

3. 配置SSH密钥登录#

SSH密码登录对应用户创建密钥

Terminal window
ssh-keygen -C "blog-git-action"
# output
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/blogdeploy/.ssh/id_ed25519):
Created directory '/home/blogdeploy/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/blogdeploy/.ssh/id_ed25519
Your public key has been saved in /home/blogdeploy/.ssh/id_ed25519.pub

将公钥加入信任,记得复制一份私钥

Terminal window
cat id_ed25519.pub >> authorized_keys
按需锁定密码登录
Terminal window
passwd -l blogdeploy

设置Github Repository secrets#

  • REMOTE_PATH 部署目录
  • REMOTE_HOST 连接主机
  • REMOTE_PORT 连接端口
  • REMOTE_USER 连接用户
  • REMOTE_PRIVATE_KEY 连接私钥

测试#

尝试手动启动一下workflow,看看是否能够部署

References#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

通过GitAction自动部署Blog到家庭服务器
https://blog.cedon.cn/posts/system-ops/deploy-blog-via-git-action/
作者
Cedon
发布于
2026-02-17
许可协议
CC BY-NC-SA 4.0
最后更新于 2026-02-17,距今已过 64 天

部分内容可能已过时

Profile Image of the Author
Cedon
Hi, I'm Cedon.
公告
如果哪一天停止活动,可能就是走了
分类
标签
站点统计
文章
13
分类
6
标签
24
总字数
11,180
运行时长
0 天
最后活动
0 天前

目录