静态站部署三条路:GitHub Pages / Vercel / 自建服务器

静态站最大的好处是:部署目标可以随便换。同一个目录,今天放 GitHub Pages,明天搬 Vercel,后天丢自己服务器上,代码一行都不用改。

一、方案对比

方案费用自定义域名HTTPS国内访问可控性
GitHub Pages免费支持(CNAME)自动签发一般,时快时慢
Vercel免费额度充足支持自动签发不稳定,偶发被墙
Cloudflare Pages免费支持自动签发中等
自建 Nginx服务器费用完全自由自己配 certbot取决于机房线路

二、GitHub Pages

最省心的入门方式。仓库 Settings → Pages → Build and deployment 选分支和目录即可。

绑定自定义域名:在仓库根目录放一个 CNAME 文件(内容就是域名),然后去 DNS 加记录。

bash
# 根域名:加 A 记录,指向 GitHub 的四个 IP
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

# www:加 CNAME 记录指向 username.github.io
www  CNAME  bzii.github.io

用 GitHub Actions 自动部署(.github/workflows/deploy.yml):

yaml
name: deploy
on:
  push:
    branches: [ main ]
permissions:
  contents: read
  pages: write
  id-token: write
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/upload-pages-artifact@v3
        with:
          path: .
      - id: deployment
        uses: actions/deploy-pages@v4

Push 之后 30 秒 ~ 2 分钟生效。GitHub Pages 默认忽略下划线开头的目录(Jekyll 行为),在根目录放一个空 .nojekyll 文件可绕过。

三、Vercel

把仓库导进去就行,构建命令留空、输出目录填 .(纯静态无构建)。每次 push 都会生成一条预览链接,这个体验是三者里最好的。

bash
npm i -g vercel
vercel --prod

自定义域名:控制台 Domains 里添加,按提示加一条 A 记录(76.76.21.21)或 CNAME(cname.vercel-dns.com),证书全自动。

四、自建服务器(我最常用的方式)

bash
rsync -avz --delete -e "ssh -p 2222" ./ user@example.com:/var/www/baize/

# 首次部署要确认权限与配置
sudo chown -R www-data:www-data /var/www/baize
sudo nginx -t && sudo systemctl reload nginx

套上 Cloudflare CDN 之后,源站 IP 被隐藏,还能白嫖缓存与压缩,性价比最高。

五、部署后的自检清单

bash
# 1. HTTP 状态码与耗时
curl -o /dev/null -s -w "code=%{http_code} time=%{time_total}s\n" https://www.bzii.cn

# 2. 检查跳转(www → 主域、http → https)
curl -sI http://www.bzii.cn | grep -i location

# 3. 检查证书链完整
openssl s_client -connect www.bzii.cn:443 -servername www.bzii.cn </dev/null 2>/dev/null | grep -E "Verify|subject="

# 4. 确认压缩生效
curl -sI -H "Accept-Encoding: gzip" https://www.bzii.cn | grep -i content-encoding

六、我的组合

  • 主站:自建 Nginx(可控、能加自定义逻辑、日志在自己手里);
  • 备份镜像:GitHub Pages(哪天服务器挂了,DNS 一切就能切过去);
  • 预览分支:Vercel(push 即出预览链接,改样式时很方便)。

三条路同时存在成本几乎为零,但容灾能力高一个档次。