Docker Compose 部署 VitePress 项目
VitePress 是由 Vue 团队开发的静态站点生成器,结合 Docker Compose 可以轻松实现项目的容器化部署。下面将详细介绍如何使用 Docker Compose 部署 VitePress 项目,包括基础配置、优化技巧和自动化部署方案。
1. 项目初始化与准备
1.1 创建 VitePress 项目
首先确保已安装 Node.js 18+和 Docker 环境,然后初始化 VitePress 项目:
bash
mkdir my-vitepress && cd my-vitepress
npm init -y
npm install -D vitepress
pnpm vitepress init # 使用交互式向导初始化项目
初始化完成后,项目目录结构通常如下:
.
├── docs
│ ├── .vitepress
│ │ └── config.js
│ ├── index.md
│ └── api-examples.md
├── package.json
└── pnpm-lock.yaml
1.2 修改构建输出目录
默认情况下,VitePress 将构建输出到.vitepress/dist
,但为了方便 Docker 部署,建议修改为根目录下的dist
文件夹。在docs/.vitepress/config.js
中添加:
javascript
import { defineConfig } from "vitepress";
import { fileURLToPath } from "node:url";
export default defineConfig({
// 其他配置...
outDir: fileURLToPath(new URL("../dist", import.meta.url)),
});
2. Docker 相关配置
2.1 创建 Dockerfile
在项目根目录创建Dockerfile
,使用多阶段构建优化镜像大小:
dockerfile
# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm --registry=http://mirrors.cloud.tencent.com/npm/ && \
pnpm install --registry=http://mirrors.cloud.tencent.com/npm/
COPY . .
RUN pnpm run docs:build
# 生产阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2.2 创建 Nginx 配置
创建nginx.conf
文件处理 VitePress 的路由:
nginx
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
# 启用gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
2.3 创建.dockerignore
避免不必要的文件被复制到镜像中:
node_modules
.git
.vitepress/cache
dist
.idea
*.md
Dockerfile
nginx.conf
.dockerignore
3. Docker Compose 配置
3.1 基础 docker-compose.yml
创建docker-compose.yml
文件:
yaml
version: "3.8"
services:
vitepress:
build: .
container_name: my-vitepress
ports:
- "8080:80"
environment:
- TZ=Asia/Shanghai
networks:
- vitepress-net
restart: unless-stopped
networks:
vitepress-net:
driver: bridge
3.2 启动项目
运行以下命令构建并启动容器:
bash
docker-compose up --build -d
访问http://localhost:8080
即可查看部署的 VitePress 站点。
4. 高级配置选项
4.1 开发环境热更新配置
对于开发环境,可以配置卷挂载实现代码热更新:
yaml
services:
vitepress:
build: .
ports:
- "5173:5173"
volumes:
- .:/app
- /app/node_modules
command: pnpm run docs:dev
environment:
- NODE_ENV=development
4.2 多服务组合部署
如果需要结合后端 API 服务,可以扩展 docker-compose 配置:
yaml
services:
vitepress:
# ...原有配置
depends_on:
- api-service
api-service:
image: my-api-image
ports:
- "3000:3000"
networks:
- vitepress-net
5. 生产环境优化建议
镜像优化:
- 使用
node:alpine
和nginx:alpine
等轻量级基础镜像 - 多阶段构建减少最终镜像大小
- 清理构建缓存:
RUN npm cache clean --force
- 使用
性能优化:
- 启用 Nginx 的 gzip 压缩
- 配置静态资源缓存策略
- 使用 CDN 加速静态资源
安全优化:
- 定期更新基础镜像版本
- 使用非 root 用户运行容器
- 配置适当的 Nginx 安全头
6. 自动化部署方案
6.1 GitHub Actions 自动化
在.github/workflows/deploy.yml
中配置:
yaml
name: Deploy VitePress
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: pnpm install
- run: pnpm run docs:build
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
push: true
tags: user/app:latest
file: ./Dockerfile
6.2 服务器端自动更新
在服务器上设置 webhook 或定时任务,当检测到新镜像时自动拉取并重启容器:
bash
docker-compose pull && docker-compose up -d --force-recreate
7. 常见问题解决
路由 404 问题:
- 确保 Nginx 配置中包含
try_files $uri $uri/ /index.html
- 检查 VitePress 的
base
配置是否正确
- 确保 Nginx 配置中包含
构建失败:
- 检查 Node.js 版本是否符合要求(建议 18+)
- 清理缓存后重试:
rm -rf node_modules && rm pnpm-lock.yaml
跨域问题:
- 开发环境可在
vitepress.config.js
中配置代理 - 生产环境通过 Nginx 统一转发 API 请求
- 开发环境可在
通过以上步骤,你可以轻松地使用 Docker Compose 部署 VitePress 项目,并根据需要扩展配置。这种部署方式提供了环境一致性、易于维护和可扩展性等优势,特别适合团队协作和持续交付场景。