GitHub Pages 静态网页部署指南:从上传 HTML 到用户通过链接访问

GitHub Pages 静态网页部署指南:从上传 HTML 到用户通过链接访问

前言

很多前端小项目、个人主页、产品介绍页、在线简历、组件 Demo、技术文档,其实并不需要单独买服务器。

如果你的网页只是由这些文件组成:

HTML
CSS
JavaScript
图片
字体
静态资源

并且不需要后端运行环境,比如 Java、Node.js、PHP、Python 服务,那么它就很适合部署到 GitHub Pages。

部署成功后,用户可以直接通过类似下面的链接访问:

https://你的用户名.github.io/仓库名/

或者如果是个人主页:

https://你的用户名.github.io/

本文按教学方式展开:

  1. GitHub Pages 是什么。
  2. 静态网页和后端服务有什么区别。
  3. GitHub Pages 的两种部署方式。
  4. 纯 HTML 项目如何发布。
  5. Vue、React、Vite 这类构建型项目如何发布。
  6. 发布后的访问链接规则。
  7. 常见 404、白屏、资源路径错误如何排查。

一、GitHub Pages 是什么

GitHub Pages 是 GitHub 提供的静态网站托管能力。

你把静态网站文件放到 GitHub 仓库中,并在仓库设置里开启 Pages,GitHub 就会把这些文件发布成一个可以公开访问的网站。

它适合部署:

  • 个人主页
  • 项目官网
  • 在线简历
  • HTML/CSS/JS 小作品
  • 前端组件 Demo
  • 技术文档
  • 博客静态页面
  • Vue、React、Vite、Hexo、Hugo 等构建后的静态文件

它不适合部署:

  • Java 后端服务
  • Spring Boot 应用
  • Node.js API 服务
  • PHP 动态网站
  • 需要数据库连接的服务端程序
  • WebSocket 后端服务

原因很简单:GitHub Pages 托管的是静态文件,不运行你的后端进程。

二、什么是静态网页

静态网页指的是浏览器拿到文件后就能直接渲染的网页。

例如:

index.html
style.css
main.js
logo.png

浏览器访问 index.html,再加载 CSS、JS、图片,页面就能显示。

它不需要服务器动态计算页面内容。

对比一下:

类型 是否适合 GitHub Pages 原因
普通 HTML/CSS/JS 适合 直接发布静态文件
Vue/React 构建产物 适合 构建后是静态文件
Vite 项目源码 不能直接发布 需要先 build
Spring Boot jar 不适合 需要 Java 进程
Node.js Express API 不适合 需要 Node 进程
PHP 网站 不适合 GitHub Pages 不运行 PHP

所以判断标准是:

最终能不能变成一批静态文件。

如果能,就可以部署到 GitHub Pages。

三、GitHub Pages 的两种发布方式

GitHub Pages 常见发布方式有两种。

方式一:从分支发布

这是最简单的方式。

你把静态文件放在仓库某个分支的根目录,或者 /docs 目录,然后在 Settings 里选择发布源。

适合:

  • 纯 HTML/CSS/JS 项目
  • 不需要构建的项目
  • 简单个人主页
  • 简单项目说明页

例如仓库结构:

my-site
├── index.html
├── style.css
└── main.js

开启 Pages 后,GitHub 直接发布这些文件。

方式二:通过 GitHub Actions 发布

如果项目需要构建,就应该使用 GitHub Actions。

适合:

  • Vue
  • React
  • Vite
  • Angular
  • Hexo
  • Hugo
  • Astro
  • Docusaurus
  • 其他需要 npm run build 的项目

例如 Vite 项目源码结构:

my-vite-app
├── package.json
├── index.html
├── src
│   └── main.js
└── vite.config.js

这个项目不能直接把源码目录当成 Pages 发布源。正确流程是:

拉取代码
安装依赖
执行 npm run build
生成 dist
把 dist 发布到 GitHub Pages

这个过程适合交给 GitHub Actions 自动完成。

四、访问链接规则

GitHub Pages 有两种常见站点类型。

4.1 用户或组织站点

仓库名必须是:

username.github.io

发布后访问:

https://username.github.io/

例如 GitHub 用户名是 octocat,仓库名就是:

octocat.github.io

访问地址:

https://octocat.github.io/

这种方式适合个人主页。

4.2 项目站点

仓库名可以是任意项目名,例如:

my-demo

发布后访问:

https://username.github.io/my-demo/

例如:

https://octocat.github.io/my-demo/

大多数项目 Demo 都属于这种方式。

五、准备一个最简单的静态网页

先从最简单的纯 HTML 项目开始。

新建一个文件:

index.html

内容:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>我的第一个 GitHub Pages 网站</title>
  <style>
    body {
      margin: 0;
      font-family: Arial, "Microsoft YaHei", sans-serif;
      background: #f5f7fb;
      color: #222;
    }

    .page {
      max-width: 760px;
      margin: 80px auto;
      padding: 32px;
      background: #fff;
      border: 1px solid #e5e7eb;
      border-radius: 8px;
    }

    h1 {
      margin-top: 0;
    }

    p {
      line-height: 1.8;
    }
  </style>
</head>
<body>
  <main class="page">
    <h1>Hello GitHub Pages</h1>
    <p>这是我的第一个通过 GitHub Pages 发布的静态网页。</p>
    <p>只要仓库配置正确,别人就可以通过链接访问这个页面。</p>
  </main>
</body>
</html>

关键点:

入口文件必须叫 index.html、index.md 或 README.md 之一。

最常用的是 index.html

六、方式一:从分支发布纯静态网页

6.1 创建 GitHub 仓库

登录 GitHub,创建一个新仓库,例如:

github-pages-demo

如果使用免费账号,并希望公开访问,建议仓库使用 public。

6.2 上传网页文件

把下面文件上传到仓库根目录:

index.html

如果有样式和脚本,也可以是:

index.html
style.css
main.js
assets/logo.png

注意入口文件要在发布目录的顶层。

如果你选择从仓库根目录发布,index.html 就要在根目录。

如果你选择从 /docs 目录发布,结构应该是:

docs
└── index.html

6.3 开启 GitHub Pages

进入仓库页面:

Settings -> Pages

在 Build and deployment 中:

Source: Deploy from a branch
Branch: main
Folder: / root

然后点击 Save。

等待 GitHub 构建和部署完成。

6.4 访问页面

项目站点访问地址通常是:

https://username.github.io/github-pages-demo/

如果 GitHub 用户名是 zhangsan,仓库名是 github-pages-demo,访问地址就是:

https://zhangsan.github.io/github-pages-demo/

GitHub 官方文档说明,发布后可能需要几分钟才生效。实际使用中,第一次开启 Pages 后等 1 到 10 分钟是正常的。

七、方式二:用 GitHub Actions 发布 Vite/React/Vue 项目

很多前端项目不是直接写一个 index.html,而是用 Vite、React、Vue 开发。

这类项目通常需要先构建:

npm install
npm run build

构建后会生成:

dist

真正要发布到 GitHub Pages 的是 dist 目录,而不是源码目录。

7.1 Vite 项目需要注意 base

如果部署到项目站点:

https://username.github.io/repository/

那么 Vite 项目要配置 base

例如仓库名是:

github-pages-demo

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  base: '/github-pages-demo/'
})

React 项目使用 Vite 时也类似:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  base: '/github-pages-demo/'
})

为什么要配置 base

因为项目站点不是部署在根路径 /,而是部署在:

/github-pages-demo/

如果不配置,页面可能能打开,但 CSS 和 JS 会请求到错误路径,导致白屏。

7.2 配置 GitHub Pages 使用 Actions

进入仓库:

Settings -> Pages

在 Build and deployment 中:

Source: GitHub Actions

保存。

7.3 新增 Actions 工作流

创建文件:

.github/workflows/deploy-pages.yml

内容:

name: Deploy static site to GitHub Pages

on:
  push:
    branches:
      - main
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: pages
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: dist

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build

    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

这个工作流做了几件事:

1. main 分支有 push 时触发
2. 拉取仓库代码
3. 安装 Node.js
4. 安装依赖
5. 执行 npm run build
6. 上传 dist 作为 Pages artifact
7. 部署到 GitHub Pages

7.4 查看部署结果

提交代码后,进入:

Actions

查看工作流是否成功。

成功后,再进入:

Settings -> Pages

可以看到 GitHub Pages 给出的访问地址。

也可以直接访问:

https://username.github.io/repository/

八、发布后为什么会 404

GitHub Pages 404 是最常见的问题。

常见原因如下。

8.1 Pages 没开启

检查:

Settings -> Pages

确认已经选择:

Deploy from a branch

或者:

GitHub Actions

8.2 没有入口文件

GitHub Pages 需要入口文件。

常见入口文件:

index.html
index.md
README.md

如果发布目录里没有这些文件,就可能 404。

8.3 文件放错目录

如果 Pages 配置的是:

main branch /docs

那么入口文件应该是:

docs/index.html

如果你放在根目录:

index.html

就不会被 /docs 发布源识别。

8.4 访问地址写错

用户站点:

https://username.github.io/

项目站点:

https://username.github.io/repository/

不要把项目站点误写成:

https://username.github.io/

除非你的仓库名就是 username.github.io

8.5 刚发布,还没生效

GitHub Pages 发布不是瞬间完成。

如果刚开启 Pages 或刚 push,可以等几分钟。

如果超过十几分钟还不生效,再检查 Actions 和 Pages 设置。

九、为什么页面打开是白屏

白屏通常不是 Pages 没发布,而是资源路径错了。

9.1 JS 或 CSS 404

打开浏览器开发者工具,看 Network。

如果看到:

/assets/index-xxx.js 404
/assets/index-xxx.css 404

说明资源路径不对。

对于项目站点:

https://username.github.io/repository/

资源路径应该带上:

/repository/

Vite 项目通常通过 base 解决:

export default defineConfig({
  base: '/repository/'
})

9.2 路由刷新 404

React Router 或 Vue Router 如果使用 history 模式,直接刷新子路由可能 404。

例如:

https://username.github.io/repository/about

GitHub Pages 会去找真实文件:

/repository/about

但这个文件不存在,于是 404。

解决思路:

  1. 使用 hash 路由。
  2. 为静态站点做 404 fallback。
  3. 使用支持 SPA rewrite 的托管平台,比如 Vercel、Netlify。

GitHub Pages 对复杂 SPA rewrite 支持有限,所以新手项目推荐先用 hash 路由。

示例:

https://username.github.io/repository/#/about

十、为什么 Actions 构建失败

如果使用 GitHub Actions 发布,失败原因通常在 Actions 日志里。

常见问题:

10.1 package-lock.json 不存在

工作流里用了:

npm ci

但仓库没有 package-lock.json,会失败。

解决:

npm install

生成 package-lock.json 后提交。

或者把工作流改成:

- name: Install dependencies
  run: npm install

生产项目更推荐提交 lock 文件并使用 npm ci

10.2 build 命令不存在

检查 package.json

{
  "scripts": {
    "build": "vite build"
  }
}

如果没有 build 脚本,下面命令会失败:

npm run build

10.3 dist 目录名称不对

工作流里写的是:

path: dist

但有些框架输出目录可能是:

build
out
public

要按实际构建结果修改。

例如 Create React App 常见输出目录是:

path: build

十一、私有仓库能不能发布

GitHub Pages 的可用范围和仓库可见性跟账号计划有关。

对于免费账号,公开仓库使用 GitHub Pages 最常见。某些付费计划或组织计划支持私有仓库发布 Pages。

但要注意一个重要点:

GitHub Pages 网站发布后是可通过互联网访问的。

即使仓库是私有的,只要 Pages 站点发布到了公网,就不要在网页里放敏感数据。

不要发布:

  • 密钥
  • token
  • 内部接口地址
  • 私有配置
  • 未公开的业务数据
  • 用户隐私数据

十二、自定义域名

GitHub Pages 默认域名是:

username.github.io

也可以绑定自己的域名,例如:

www.example.com

大致步骤:

  1. 在 GitHub Pages 设置里填写 Custom domain。
  2. 在域名 DNS 服务商处配置 CNAME 或 A 记录。
  3. 等待 DNS 生效。
  4. 开启 Enforce HTTPS。

如果只是学习和发布 Demo,不需要一开始就绑定自定义域名。先用默认 github.io 域名即可。

十三、完整流程总结

纯 HTML 项目

1. 创建 GitHub 仓库
2. 上传 index.html
3. Settings -> Pages
4. Source 选择 Deploy from a branch
5. Branch 选择 main 和 / root
6. 等待发布完成
7. 访问 https://username.github.io/repository/

Vite/React/Vue 项目

1. 确认 npm run build 能正常生成 dist
2. 如果是项目站点,配置 base: '/repository/'
3. Settings -> Pages -> Source 选择 GitHub Actions
4. 新增 .github/workflows/deploy-pages.yml
5. push 到 main
6. 在 Actions 查看构建和部署结果
7. 访问 https://username.github.io/repository/

十四、实践检查清单

发布前检查:

  • 仓库是否已经 push 到 GitHub
  • 是否有入口文件 index.html
  • Pages 发布源是否配置正确
  • 项目站点路径是否包含仓库名
  • Vite/React/Vue 项目是否执行了 build
  • 构建输出目录是否和 Actions 配置一致
  • 是否配置了正确的 base
  • 页面里是否包含敏感信息

发布后检查:

  • Settings -> Pages 是否显示访问地址
  • Actions 是否执行成功
  • 访问链接是否正确
  • Network 里 CSS/JS 是否 404
  • 子路由刷新是否 404
  • 手机端访问是否正常

总结

GitHub Pages 的核心价值是:

把 GitHub 仓库中的静态文件发布成一个可公开访问的网站。

如果是简单 HTML 页面,直接用分支发布即可。

如果是 Vue、React、Vite 这类需要构建的项目,推荐使用 GitHub Actions:先构建,再部署构建产物。

记住三个关键点:

1. GitHub Pages 只能托管静态文件,不运行后端服务。
2. 项目站点访问路径是  https://username.github.io/repository/ 。
3. 构建型前端项目要注意 base 路径和构建输出目录。

掌握这三点,大多数 GitHub Pages 部署问题都能定位清楚。

参考资料

posted @ 2026-07-27 09:18  松鼠航  阅读(2)  评论(0)    收藏  举报