0175799004
删除不再需要的文档、测试报告和计划文件,包括标题层级规范、颜色优化报告、测试框架文档等
8.8 KiB
8.8 KiB
部署文档
部署概述
项目采用 Next.js 静态导出模式,构建生成纯静态 HTML 文件,可部署到任何静态文件服务器或 CDN。
构建配置
Next.js 配置
// next.config.ts
const nextConfig: NextConfig = {
output: 'export', // 静态导出模式
distDir: 'dist', // 输出目录
images: {
unoptimized: true, // 静态导出需要禁用图片优化
},
compress: true,
poweredByHeader: false,
reactStrictMode: true,
};
构建命令
# 开发模式(不导出)
npm run dev
# 生产构建(静态导出)
npm run build
# 输出目录
dist/
环境变量
必需配置
# .env.production
RESEND_API_KEY=re_xxxxx
COMPANY_EMAIL=contact@novalon.cn
可选配置
NODE_ENV=production
NEXT_PUBLIC_SITE_URL=https://www.novalon.cn
环境变量说明
| 变量名 | 必需 | 描述 |
|---|---|---|
RESEND_API_KEY |
是 | Resend 邮件服务 API 密钥 |
COMPANY_EMAIL |
是 | 公司接收邮件的邮箱地址 |
NODE_ENV |
否 | 环境标识 |
NEXT_PUBLIC_SITE_URL |
否 | 网站公开 URL |
部署平台
1. Vercel 部署(推荐)
优势:
- 零配置部署
- 自动 HTTPS
- 全球 CDN
- 预览部署
- 边缘函数支持
部署步骤:
- 连接 Git 仓库
- 配置环境变量
- 部署设置:
- Build Command:
npm run build - Output Directory:
dist - Install Command:
npm install
- Build Command:
vercel.json 配置:
{
"buildCommand": "npm run build",
"outputDirectory": "dist",
"framework": "nextjs",
"regions": ["hkg1"]
}
2. 静态文件服务器部署
适用场景:
- Nginx
- Apache
- IIS
- 云存储(阿里云 OSS、腾讯云 COS)
Nginx 配置示例:
server {
listen 80;
server_name www.novalon.cn novalon.cn;
root /var/www/novalon-website/dist;
index index.html;
# 强制 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name www.novalon.cn novalon.cn;
root /var/www/novalon-website/dist;
index index.html;
# SSL 证书
ssl_certificate /etc/nginx/ssl/novalon.cn.pem;
ssl_certificate_key /etc/nginx/ssl/novalon.cn.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# 安全头部
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;" always;
# Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# HTML 不缓存
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-store, no-cache, must-revalidate";
}
# SPA 路由支持
location / {
try_files $uri $uri.html $uri/ =404;
}
# 404 页面
error_page 404 /404.html;
}
3. Docker 部署
Dockerfile:
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 运行阶段
FROM nginx:alpine
# 复制构建产物
COPY --from=builder /app/dist /usr/share/nginx/html
# 复制 Nginx 配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
构建和运行:
# 构建镜像
docker build -t novalon-website .
# 运行容器
docker run -d -p 80:80 --name novalon novalon-website
4. 云存储部署
阿里云 OSS:
- 创建 OSS Bucket
- 配置静态网站托管
- 上传
dist/目录内容 - 配置自定义域名
- 配置 HTTPS 证书
腾讯云 COS:
- 创建 COS Bucket
- 开启静态网站功能
- 上传构建产物
- 配置 CDN 加速
CI/CD 流水线
Woodpecker CI 配置
# .woodpecker.yml
pipeline:
install:
image: node:18-alpine
commands:
- npm ci
when:
event:
- push
- pull_request
lint:
image: node:18-alpine
commands:
- npm run lint
when:
event:
- push
- pull_request
build:
image: node:18-alpine
environment:
NODE_ENV: production
commands:
- npm run build
when:
event:
- push
branch:
- main
e2e-tests:
image: node:18-alpine
environment:
NODE_ENV: test
CI: true
commands:
- cd e2e
- npm ci
- npx playwright install --with-deps chromium
- npm run test:smoke
when:
event:
- push
- pull_request
deploy:
image: node:18-alpine
commands:
- npm install -g vercel
- vercel --prod --token=$VERCEL_TOKEN
secrets:
- vercel_token
when:
event:
- push
branch:
- main
部署检查清单
部署前检查
- 环境变量已配置
- 构建成功无错误
- E2E 测试通过
- ESLint 检查通过
- 图片资源已优化
- 死链检查通过
部署后验证
- 首页正常加载
- 所有页面可访问
- 表单提交正常
- 移动端适配正常
- HTTPS 证书有效
- 性能指标达标
- SEO 元数据正确
性能指标
| 指标 | 目标值 |
|---|---|
| LCP | < 2.5s |
| FID | < 100ms |
| CLS | < 0.1 |
| TTFB | < 600ms |
| 首屏加载 | < 3s |
回滚策略
Vercel 回滚
# 列出部署历史
vercel ls
# 回滚到指定版本
vercel rollback [deployment-url]
静态服务器回滚
# 保留历史版本
/var/www/novalon-website/
├── current -> releases/20260307-1
├── releases/
│ ├── 20260307-1/
│ ├── 20260306-1/
│ └── 20260305-1/
└── shared/
# 回滚操作
ln -sfn releases/20260306-1 current
监控与告警
推荐工具
| 工具 | 用途 |
|---|---|
| Vercel Analytics | 性能监控 |
| Sentry | 错误监控 |
| Uptime Robot | 可用性监控 |
| Google Search Console | SEO 监控 |
告警配置
# Uptime Robot 配置示例
monitors:
- name: Novalon Website
url: https://www.novalon.cn
type: https
interval: 300
alert_contacts:
- email: admin@novalon.cn
安全配置
安全头部
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;
Permissions-Policy: camera=(), microphone=(), geolocation=()
HTTPS 配置
- 使用 TLS 1.2 或更高版本
- 配置 HSTS
- 启用 OCSP Stapling
- 使用强加密套件
性能优化
构建优化
-
代码分割
- 动态导入非首屏组件
- 路由级别分割
-
资源优化
- 图片压缩和格式转换
- CSS 压缩
- JavaScript 压缩
-
缓存策略
- 静态资源长缓存
- HTML 不缓存
- API 响应适当缓存
CDN 配置
# CDN 缓存规则
*.js, *.css -> 缓存 1 年
*.jpg, *.png -> 缓存 1 年
*.woff, *.woff2 -> 缓存 1 年
*.html -> 不缓存
故障排查
常见问题
1. 页面 404 错误
- 检查静态文件是否正确上传
- 检查 Nginx 配置的 root 路径
- 检查 SPA 路由配置
2. 样式加载失败
- 检查 CSS 文件路径
- 检查 Content-Security-Policy 配置
- 清除浏览器缓存
3. 表单提交失败
- 检查 API 路由是否正常
- 检查环境变量配置
- 检查 CORS 配置
4. 性能问题
- 检查图片是否优化
- 检查 CDN 是否生效
- 检查服务器响应时间
日志查看
# Nginx 访问日志
tail -f /var/log/nginx/access.log
# Nginx 错误日志
tail -f /var/log/nginx/error.log
# Vercel 日志
vercel logs [deployment-url]
维护计划
定期任务
| 任务 | 频率 |
|---|---|
| 依赖更新 | 每月 |
| 安全扫描 | 每周 |
| 性能测试 | 每周 |
| 备份验证 | 每月 |
| SSL 证书更新 | 到期前 30 天 |
更新流程
- 创建更新分支
- 执行依赖更新
- 运行测试套件
- 部署到预览环境
- 验证功能正常
- 合并到主分支
- 自动部署到生产环境