当前位置:首页 > 技术 > 正文内容

使用 GitHub Actions 实现前端项目的自动化部署流程

访客 技术 2026年6月21日 1

背景与需求

在开发个人前端项目时,频繁手动构建和部署会影响迭代效率。为了实现代码提交后自动将最新版本部署到服务器,提升协作和预览体验,采用 GitHub Actions 搭建无服务器干预的 CI/CD 流程成为理想选择。

方案对比与选型

  • Jenkins:功能强大但需独立部署服务,维护成本高,还需编写 Shell 脚本进行构建和传输,适合复杂企业级场景,轻量项目显得臃肿。
  • Vercel / Netlify 等托管平台:开箱即用,但依赖第三方网络稳定性,在国内访问时常受限,且无法完全掌控部署环境。
  • GitHub Actions:依托仓库原生支持,无需额外平台或服务器,通过事件触发即可完成构建、打包与发布,集成度高、配置灵活,适合自托管部署。

最终选定 GitHub Actions 结合 SSH 协议将构建产物推送至自有服务器。

部署架构概览

整个流程包含以下组件:

  • GitHub 仓库(存放源码)
  • 远程 Linux 服务器(运行 Nginx 提供静态服务)
  • SSH 密钥认证机制(安全传输文件)

步骤一:生成并配置 SSH 密钥对

为确保 Actions 能安全登录服务器,需生成专用密钥对:

ssh-keygen -t rsa -b 4096 -C "github-action-deploy" -f ./github_deploy_key

执行后生成两个文件:

  • github_deploy_key:私钥,用于 GitHub Secrets 存储
  • github_deploy_key.pub:公钥,需添加至服务器的 ~/.ssh/authorized_keys

将公钥内容写入目标服务器对应用户的授权列表中:

echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

步骤二:设置仓库 Secrets

进入 GitHub 仓库 → Settings → Security → Secrets and variables → Actions,新增以下变量:

名称 说明
SERVER_HOST 服务器公网 IP 或域名
SERVER_USER 可登录的系统用户(建议非 root)
SSH_PRIVATE_KEY 上面生成的私钥内容(github_deploy_key 文件全部内容)
SCP_PORT SSH 端口,默认为 22
DEPLOY_PATH 服务器上 Nginx 指向的静态资源目录,如:/var/www/html/myapp

步骤三:配置 Nginx 静态站点

确保服务器已安装 Nginx 或 OpenResty,并创建对应的 server 块:

server {
    listen 80;
    server_name your-domain.com;

    root /var/www/html/myapp;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

注意将 root 路径与 DEPLOY_PATH 保持一致。若使用面板工具(如 1Panel),可在图形界面完成路径绑定。

步骤四:编写 GitHub Actions 工作流

在项目根目录下创建 .github/workflows/deploy.yml

name: Build and Deploy

on:
  push:
    branches:
      - main

jobs:
  deploy-frontend:
    runs-on: ubuntu-latest
    steps:
      - name: 获取源码
        uses: actions/checkout@v4

      - name: 安装 Node.js 环境
        uses: actions/setup-node@v3
        with:
          node-version: '18'
          cache: 'npm'

      - name: 安装依赖并构建
        run: |
          npm install
          npm run build

      - name: 同步文件到服务器
        uses: appleboy/scp-action@v0.1.5
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: ${{ secrets.SCP_PORT }}
          source: "dist/*"
          target: ${{ secrets.DEPLOY_PATH }}

该工作流会在每次推送到 main 分支时自动触发,依次完成代码拉取、依赖安装、构建打包及文件同步。

验证部署结果

提交代码后,进入仓库的 Actions 标签页,可查看工作流执行日志。成功后访问服务器地址即可看到最新页面。

若构建失败,可根据日志排查 Node 版本、脚本命令、权限或网络问题。

标签: GitHub Actions

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。