跳到主要内容

静态网站部署

静态网站由预先生成的 HTML、CSS、JavaScript 文件组成,用户访问时服务器直接返回这些文件,无需动态处理。静态网站具有访问速度快、安全性高、成本低廉等优点,非常适合个人博客、技术文档、企业官网等场景。

静态网站的特点​

优势​

访问速度快

静态文件直接由 Web 服务器返回,无需数据库查询和程序处理,响应速度极快。配合 CDN 分发,可以实现毫秒级响应。

安全性高

没有数据库、没有后端程序,攻击面极小。不存在 SQL 注入、XSS 等常见 Web 漏洞。

稳定性好

静态网站不依赖复杂的运行环境,只要 Web 服务器正常运行,网站就能访问。没有程序崩溃的风险。

成本低廉

静态网站可以部署在对象存储、CDN 等低成本平台上,甚至可以免费托管。无需维护服务器,运维成本几乎为零。

易于扩展

静态文件可以轻松部署到全球 CDN 节点,自动实现负载均衡和高可用。

局限性​

功能受限

无法实现用户注册、评论、搜索等需要后端处理的功能。可以通过第三方服务(如 Disqus、Algolia)补充部分功能。

更新流程

每次更新内容需要重新构建和部署,不如动态网站直观。但通过 CI/CD 自动化可以简化流程。

个性化受限

难以实现个性化内容推荐、用户偏好设置等功能。

静态网站生成器​

静态网站生成器(Static Site Generator,SSG)是将模板和内容文件转换为静态 HTML 文件的工具。

主流静态网站生成器​

Hugo

Go 语言编写,构建速度极快,适合大型网站。配置简单,主题丰富,是个人博客的热门选择。

Hexo

基于 Node.js,中文社区活跃,主题和插件丰富。适合熟悉 JavaScript 的用户。

Jekyll

Ruby 编写,GitHub Pages 原生支持。适合托管在 GitHub Pages 的项目。

VuePress

基于 Vue.js,专为技术文档设计。支持 Vue 组件,可扩展性强。

Next.js

React 全栈框架,支持静态生成和服务端渲染。适合 React 开发者。

Docusaurus

Facebook 开发,专为开源项目文档设计。支持版本管理、国际化等功能。

选择建议​

场景推荐工具
个人博客Hugo、Hexo
技术文档VuePress、Docusaurus
React 项目Next.js
GitHub PagesJekyll
快速构建Hugo

部署方案​

云服务器部署​

将静态文件部署到自己的云服务器,完全控制服务器环境。

步骤一:构建静态文件

以 Hugo 为例:

hugo --minify

生成的静态文件在 public 目录。

步骤二:上传文件到服务器

使用 scp 或 rsync 上传:

scp -r public/* root@server:/var/www/html/

或使用 rsync 增量同步:

rsync -avz public/ root@server:/var/www/html/

步骤三:配置 Nginx

server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html;

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

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}

对象存储部署​

将静态文件存储在对象存储(如阿里云 OSS、腾讯云 COS),开启静态网站托管功能。

阿里云 OSS 部署:

  1. 创建 OSS Bucket,选择与用户就近的地域
  2. 开启"静态网站托管",设置默认首页为 index.html
  3. 上传静态文件到 Bucket
  4. 配置自定义域名,绑定到 Bucket
  5. 开启 CDN 加速,提升访问速度

优势:

  • 无需维护服务器
  • 按流量计费,成本低
  • 自动扩展,无需担心容量

GitHub Pages 部署​

GitHub Pages 提供免费的静态网站托管服务,适合开源项目和个人博客。

步骤一:创建仓库

创建名为 username.github.io 的仓库(username 替换为你的 GitHub 用户名),或使用任意仓库的 gh-pages 分支。

步骤二:上传静态文件

将静态文件推送到仓库:

git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/username/username.github.io.git
git push -u origin main

步骤三:配置 GitHub Pages

在仓库 Settings → Pages 中选择分支和目录,保存后即可通过 https://username.github.io 访问。

自定义域名:

  1. 在仓库根目录创建 CNAME 文件,内容为自定义域名
  2. 添加 DNS 解析记录:
    • A 记录指向 GitHub Pages IP
    • 或 CNAME 记录指向 username.github.io
  3. 在 GitHub Pages 设置中绑定自定义域名
  4. 开启 HTTPS(自动签发 Let's Encrypt 证书)

Vercel 部署​

Vercel 是专业的静态网站托管平台,支持自动构建和部署。

步骤一:导入项目

登录 Vercel,点击"New Project",导入 GitHub 仓库。

步骤二:配置构建设置

Vercel 自动识别项目类型,配置构建命令和输出目录:

框架构建命令输出目录
Hugohugopublic
Hexohexo generatepublic
Next.jsnpm run build.next
VuePressnpm run build.vuepress/dist

步骤三:部署

点击 Deploy,Vercel 自动构建并部署。每次推送代码都会自动触发重新部署。

自定义域名:

在项目 Settings → Domains 中添加自定义域名,Vercel 会自动配置 DNS 和 SSL 证书。

Netlify 部署​

Netlify 是另一个流行的静态网站托管平台,功能与 Vercel 类似。

部署步骤:

  1. 登录 Netlify,点击"New site from Git"
  2. 选择代码仓库
  3. 配置构建命令和输出目录
  4. 点击 Deploy

netlify.toml 配置文件:

[build]
command = "hugo --gc --minify"
publish = "public"

[build.environment]
HUGO_VERSION = "0.121.0"

[[redirects]]
from = "/*"
to = "/index.html"
status = 200

Cloudflare Pages 部署​

Cloudflare Pages 提供免费的静态网站托管,集成 Cloudflare CDN 和安全防护。

部署步骤:

  1. 登录 Cloudflare Dashboard,进入 Pages
  2. 点击"Create a project",连接 GitHub 仓库
  3. 配置构建设置
  4. 部署完成后,可绑定自定义域名

优势:

  • 全球 CDN 加速
  • 免费无限带宽
  • 内置安全防护
  • 支持 Cloudflare Workers

CI/CD 自动化部署​

通过 CI/CD 流水线,实现代码提交后自动构建和部署。

GitHub Actions​

创建 .github/workflows/deploy.yml:

name: Deploy to GitHub Pages

on:
push:
branches: [main]

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true

- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.121.0'

- name: Build
run: hugo --minify

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public

部署到云服务器​

使用 rsync 部署到云服务器:

- name: Deploy to server
uses: burnett01/rsync-[email protected]
with:
switches: -avzr --delete
path: public/
remote_path: /var/www/html/
remote_host: ${{ secrets.SERVER_HOST }}
remote_user: ${{ secrets.SERVER_USER }}
remote_key: ${{ secrets.SSH_PRIVATE_KEY }}

部署到 OSS​

使用阿里云 OSS 部署:

- name: Setup Aliyun OSS
uses: manyuanrong/setup-[email protected]
with:
endpoint: oss-cn-hangzhou.aliyuncs.com
access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }}
access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SECRET }}

- name: Deploy to OSS
run: ossutil cp -r -f public/ oss://your-bucket-name/

性能优化​

资源压缩​

HTML/CSS/JS 压缩:

构建时启用压缩:

hugo --minify
hexo generate --brotli

图片压缩:

使用工具压缩图片:

npm install -g imagemin-cli
imagemin images/* --out-dir=dist/images

缓存策略​

配置浏览器缓存:

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}

location ~* \.(html)$ {
expires 1h;
add_header Cache-Control "public, must-revalidate";
}

CDN 加速​

将静态资源部署到 CDN,就近响应用户请求:

  • 使用云服务商 CDN(阿里云 CDN、腾讯云 CDN)
  • 使用 Cloudflare、jsDelivr 等免费 CDN
  • 将静态资源托管在对象存储并开启 CDN

预加载和预连接​

在 HTML 中添加预加载提示:

<link rel="preconnect" href="https://cdn.example.com">
<link rel="preload" href="/css/main.css" as="style">
<link rel="preload" href="/js/main.js" as="script">

小结​

静态网站是个人博客、技术文档等场景的理想选择。本章介绍了静态网站的特点、主流静态网站生成器、多种部署方案以及 CI/CD 自动化部署方法。选择合适的部署方案,可以让你的静态网站快速上线并稳定运行。

下一章,我们将学习动态网站的部署方法,了解如何部署需要后端处理的网站应用。