AI摘要
本文介绍了如何使用GitHub Actions实现Astro博客的自动构建和部署到VPS。首先,需要在本地生成SSH密钥对并上传公钥到VPS,然后在GitHub设置Secrets保存私钥和服务器信息。接下来,在项目根目录创建deploy.yml文件,配置Workflow脚本,实现自动构建和部署。整个过程简化了博客更新的繁琐步骤,提高了效率。
# 前言:为什么要自动化?
1.以前每次写完文章,我都需要经历繁琐的步骤:pnpm build 生成静态文件 -> 打开 FTP/SFTP 软件 -> 连接服务器 -> 手动上传文件。这个过程不仅麻烦,还容易传错文件。
现在可以用 GitHub Actions,只需要一个 git push,GitHub 就会自动帮我跑完所有流程,几分钟后网站就自动更新了。这篇文章记录了完整的配置过程。
准备工作
- 服务器 (VPS):拥有一台 Linux 服务器。
- GitHub 仓库:存放博客源码(私有仓库也可以)。
- 项目框架:本文以 Astro + PNPM 为例,其他静态框架(Hexo/VuePress)逻辑通用。
第一步:配置 SSH 免密登录
为了让 GitHub 的服务器能连接到我的 VPS,需要使用 SSH 密钥对。
本地生成密钥:
ssh-keygen -t rsa -b 4096 -f ./github_action_key -C "github-actions"生成后会得到私钥(无后缀)和公钥(.pub)。
- 上传公钥到 VPS:
将.pub文件内容追加到服务器的~/.ssh/authorized_keys文件中。
第二步:在 GitHub 设置 Secrets
为了安全,不能把私钥和服务器 IP 直接写在代码里,需要用到 GitHub 仓库的 Secrets 功能。
进入仓库 -> Settings -> Secrets and variables -> Actions,添加以下变量:
SSH_PRIVATE_KEY: 刚才生成的私钥内容(包含-----BEGIN...开头)REMOTE_HOST: 服务器 IP 地址REMOTE_USER: 服务器用户名(如 root)REMOTE_TARGET: 网站在服务器上的绝对路径(如/www/wwwroot/myblog/)
第三步:编写 Workflow 脚本
在项目根目录创建 .github/workflows/deploy.yml。
这是我最终调试通过的配置(基于 Astro + PNPM):
name: Deploy to VPS
on:
push:
branches: [ master ] # 只有推送到 master 分支才触发
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
- name: Setup PNPM 📦
uses: pnpm/action-setup@v4
with:
version: 9.14.4
run_install: false
- name: Setup Node.js 🟢
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- name: Install Dependencies 🔧
run: pnpm install --no-frozen-lockfile
- name: Build Site 🏗️
run: pnpm run build
- name: Deploy to Server 🚀
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
REMOTE_PORT: 22 # 如果你的 SSH 端口不是 22,这里要指定
ARGS: "-rltgoDzvO --delete"
SOURCE: "dist/" # Astro 默认生成目录
原链接在2月份将不可访问,遂需在各位uu那里更新友链~原先是这个⬇️
原博客:Cloud;Blog
原友链:cloudofficial.top现在换成这个⬇️
现博客:Cloud09_Space
现友链:cloud09.space
icon(如果需要):https://raw.githubusercontent.com/cloud-oc/picx-images-hosting/refs/heads/master/Origin/Cloud_icon.pfpafpaii.png
简介:云零九空间
本站信息名称: LHL's Blog主页: https://blog.lhl.oneLogo: https://cdn.sa.net/2025/04/18/KXpf8u5SQYNPkA3.jpg简介:想把海洋里所有鱼都握在手里,把森林里里所有花都插在心头.