Skip to content

VitePress 技术博客搭建全过程记录

前言

本文记录了使用 VitePress 搭建技术博客的完整过程,包括技术选型、Docker 部署、CI/CD 配置、安全检查等环节。

一、需求分析

目标

  • 基于 VitePress 搭建技术博客
  • 便于更新 Markdown 文档
  • 支持 CI/CD 自动化部署
  • 部署到自有服务器(Docker 容器)

技术选型

组件选择理由
静态站点生成器VitePress轻量、快速、Vue 生态
容器平台Docker跨平台、一致性部署
镜像仓库阿里云 ACR 个人版免费、 国内访问快
CI/CDGitHub Actions免费额度、集成方便
自动更新Watchtower简单、自动化

二、项目初始化

创建项目结构

bash
static_blog/
├── docs/                      # VitePress 源文件
   ├── .vitepress/
   └── config.mts         # VitePress 配置
   ├── posts/                 # 博客文章目录
   ├── index.md               # 首页
   └── about.md               # 关于页
├── .github/
   └── workflows/
       └── deploy.yml         # GitHub Actions 工作流
├── docker-compose.yml         # 容器编排
├── Dockerfile                 # 多阶段构建
├── package.json               # 项目配置
└── .env.example              # 环境变量模板

安装依赖

bash
npm init -y
npm install -D vitepress vue

VitePress 配置

typescript
// docs/.vitepress/config.mts
import { defineConfig } from 'vitepress'

export default defineConfig({
  title: "技术博客",
  description: "VitePress 技术博客",
  themeConfig: {
    nav: [
      { text: '首页', link: '/' },
      { text: '文章', link: '/posts/' },
      { text: '关于', link: '/about' }
    ],
    socialLinks: [
      { 
        icon: 'github', 
        link: `https://github.com/${import.meta.env.VITE_GITHUB_USER}`
      }
    ]
  }
})

三、Docker 配置

Dockerfile(多阶段构建)

dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run docs:build

FROM nginx:alpine
COPY --from=builder /app/docs/.vitepress/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

docker-compose.yml(含 Watchtower)

yaml
version: '3.8'

services:
  blog:
    image: blog:latest
    ports:
      - "3000:80"
    restart: unless-stopped
    labels:
      - "com.centurylinklabs.watchtower.scope=blog"

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
    command: --scope blog --interval 300
    restart: unless-stopped

四、CI/CD 配置

GitHub Actions 工作流

yaml
name: Build and Push to ACR

on:
  push:
    branches:
      - main

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Alibaba Cloud ACR
        uses: docker/login-action@v3
        with:
          registry: ${{ secrets.ACR_REGISTRY }}
          username: ${{ secrets.ACR_USERNAME }}
          password: ${{ secrets.ACR_PASSWORD }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: |
            ${{ secrets.ACR_REGISTRY }}/${{ secrets.ACR_NAMESPACE }}/blog:latest

需要配置的 GitHub Secrets

Secret说明
ACR_REGISTRYACR 地址(如 crpi-xxx.cn-hangzhou.personal.cr.aliyuncs.com
ACR_NAMESPACE命名空间
ACR_USERNAME阿里云账号
ACR_PASSWORDACR 访问密码

五、自动部署流程

┌─────────────┐    push     ┌─────────────┐         ┌─────────────┐
│   本地开发   │ ──────────► │  GitHub     │  push   │   阿里云    │
│ (写 md)     │             │ (Actions)   │ ──────► │    ACR      │
└─────────────┘             └─────────────┘         └─────────────┘

                                                      │ 定期轮询 (每5分钟)

                                               ┌─────────────┐
                                               │   服务器    │
                                               │  Watchtower │ ──► 自动更新
                                               └─────────────┘

六、安全检查

检查项目

检查项结果
外部链接有效性⚠️ 存在占位符
敏感信息泄露✅ 无
npm 依赖漏洞✅ 无
Docker 安全✅ 安全

环境变量配置

敏感信息通过 .env 文件管理:

bash
# .env.example
VITE_GITHUB_USER=your-github-username
VITE_EMAIL=your-email@example.com

.env 文件已加入 .gitignore,不会被提交到仓库。

七、Playwright E2E 测试

测试计划

测试类别测试项
页面加载各页面 HTTP 200
首页Hero, Features, Actions
导航顶部导航、侧边栏
链接外部链接、内部链接
SEOMeta 标签

运行测试

bash
npm run docs:dev  # 启动开发服务器
npx playwright install chromium
npx playwright test

八、Git 提交记录

提交说明
docs: 添加 VitePress 文档源文件初始文档
chore: 添加 package.json 项目配置依赖配置
docker: 添加 Docker 构建配置Docker 配置
ci: 添加 GitHub Actions 工作流CI/CD 配置
config: 添加配置文件和 README配置文件
docs: 添加 AGENTS.md 项目说明Agent 说明
docs: 添加开发计划文档开发计划
test: 添加 Playwright 测试计划与配置测试配置
docs: 添加安全检查报告安全检查
chore: 添加环境变量配置环境变量

九、后续扩展

  • [ ] 添加全文搜索功能
  • [ ] 添加 RSS 订阅
  • [ ] 添加评论功能
  • [ ] 添加站点统计
  • [ ] 自定义主题样式

总结

本文记录了从零搭建 VitePress 技术博客的完整过程,包括项目初始化、Docker 容器化、CI/CD 自动化、安全检查等环节。通过环境变量管理敏感信息,使用 Watchtower 实现自动更新,整个部署流程自动化程度很高。


本文档基于实际搭建过程整理,记录日期:2024

Released under the MIT License.