对于独立开发者而言,部署流程中的“心智摩擦”应当趋近于零。
本网站基于 Astro 框架构建。为了将本地代码高效交付至个人服务器,采用 GitHub Actions 配合 rsync/SSH 是目前最为标准、低阻力的工业级实践。
这套闭环打通后,你只需专注本地内容产出。一次极简的 git push 即可接管后续所有工作:触发云端自动构建(npm run build),并将编译后的 dist/ 目录精准、安全地同步至服务器端。
以下是剔除冗余后的最小可行性配置指南,涵盖了从服务器配置到自动化落地的核心环节。
一、 服务器端:配置专属密钥与权限收敛
为实现 GitHub Actions 对服务器的自动化推送,需建立基于 RSA 密钥的免密信任机制。请在服务器终端依次执行以下操作:
1. 生成部署专用密钥对
生成专属密钥(请勿设置密码,一路回车即可):
ssh-keygen -m PEM -t rsa -b 4096 -C "github-actions-deploy" -f ~/.ssh/github_actions
2. 注入公钥白名单
将生成的公钥(.pub)追加写入服务器的 SSH 授权列表中:
cat ~/.ssh/github_actions.pub >> ~/.ssh/authorized_keys
3. 收敛目录权限(高频报错点)
Linux 的 sshd 守护进程具有极其严格的安全底线。若文件权限过度暴露,将静默拒绝所有密钥连接。必须严格执行以下覆写命令:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
4. 提取私钥凭证
在终端打印并完整复制私钥内容(务必包含 -----BEGIN... 与 -----END... 首尾声明),准备注入至 GitHub:
cat ~/.ssh/github_actions
二、 GitHub 端:配置机密环境变量 (Secrets)
服务器的登录凭证绝不可硬编码于仓库代码中。进入你的 GitHub 仓库主页,导航至: Settings -> Secrets and variables -> Actions -> New repository secret
依次建立以下 3 个机密变量:
SERVER_HOST:服务器公网 IP 地址。SERVER_USER:服务器的登录用户名(如root、ubuntu)。SERVER_SSH_KEY:刚刚复制的私钥完整内容。
三、 代码库:编排自动化工作流 (Workflow)
在 Astro 项目根目录下创建 .github/workflows/deploy.yml 文件。此脚本将拦截每一次向 main 分支的推送请求并自动执行部署任务。
name: 🚀 Build and Deploy Astro
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 🛎️ Checkout Code
uses: actions/checkout@v4
- name: ⚙️ Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 📦 Install Dependencies
run: npm ci
- name: 🛠️ Build Astro Site
run: npm run build
- name: ☁️ Deploy to Server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
# 开启 --delete 确保自动清理远端废弃文件
ARGS: "-rlgoDzvc -i --delete"
SOURCE: "dist/" # Astro 编译后的默认输出目录
REMOTE_HOST: ${{ secrets.SERVER_HOST }}
REMOTE_USER: ${{ secrets.SERVER_USER }}
# ⚠️ 请替换为服务器实际的网站绝对路径
TARGET: "/var/www/your-site"
全部配置完成后,将代码推送至主分支。检查 GitHub 的 Actions 面板,若构建任务显示绿色对勾,即代表整个自动化部署链路已成功闭环。