finyx_data_frontend/DEPLOYMENT.md
2026-01-07 08:13:50 +08:00

556 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 部署与运行说明文档
本文档详细说明 Finyx AI Prototype 项目的部署和运行流程。
## 📋 目录
- [环境准备](#环境准备)
- [本地开发](#本地开发)
- [生产构建](#生产构建)
- [部署方式](#部署方式)
- [静态文件部署](#静态文件部署)
- [Docker 部署](#docker-部署)
- [Nginx 配置](#nginx-配置)
- [环境变量配置](#环境变量配置)
- [常见问题](#常见问题)
## 🔧 环境准备
### 系统要求
- **操作系统**: Linux / macOS / Windows
- **Node.js**: >= 16.0.0 (推荐使用 LTS 版本)
- **npm**: >= 7.0.0 或 **yarn**: >= 1.22.0
- **内存**: 至少 2GB 可用内存
- **磁盘空间**: 至少 500MB 可用空间
### 检查环境
```bash
# 检查 Node.js 版本
node -v
# 应显示 v16.x.x 或更高版本
# 检查 npm 版本
npm -v
# 应显示 7.x.x 或更高版本
```
### 安装 Node.js如未安装
#### Linux (Ubuntu/Debian)
```bash
# 使用 NodeSource 仓库安装
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
```
#### macOS
```bash
# 使用 Homebrew
brew install node
```
#### Windows
从 [Node.js 官网](https://nodejs.org/) 下载安装包并安装
## 💻 本地开发
### 1. 克隆项目
```bash
git clone <repository-url>
cd finyx_data_frontend
```
### 2. 安装依赖
```bash
npm install
```
如果安装速度慢,可以使用国内镜像:
```bash
# 使用淘宝镜像
npm install --registry=https://registry.npmmirror.com
# 或使用 cnpm
npm install -g cnpm --registry=https://registry.npmmirror.com
cnpm install
```
### 3. 启动开发服务器
```bash
npm run dev
```
启动成功后,终端会显示:
```
VITE v5.x.x ready in xxx ms
➜ Local: http://localhost:5173/
➜ Network: http://192.168.x.x:5173/
```
可以通过以下方式访问:
- **本地访问**: `http://localhost:5173`
- **局域网访问**: 使用终端显示的 Network 地址(例如:`http://192.168.1.100:5173`
**注意**: 开发服务器已配置为允许外部访问,可以通过局域网 IP 地址访问,方便移动设备测试或远程调试。
### 4. 开发模式特性
- **热模块替换 (HMR)**: 代码修改后自动刷新
- **快速构建**: Vite 提供极速的开发体验
- **TypeScript 支持**: 实时类型检查
- **ESLint 检查**: 代码质量检查
### 5. 修改端口和主机配置(如需要)
如果 5173 端口被占用,可以通过以下方式修改:
**方式一:命令行参数**
```bash
# 修改端口
npm run dev -- --port 3000
# 指定主机(允许外部访问)
npm run dev -- --host 0.0.0.0 --port 3000
```
**方式二:修改 vite.config.ts**
```typescript
export default defineConfig({
server: {
host: '0.0.0.0', // 允许外部访问
port: 3000, // 自定义端口
strictPort: false, // 端口被占用时自动尝试下一个
}
})
```
**获取本机 IP 地址**:
```bash
# Linux/macOS
ip addr show | grep "inet " | grep -v 127.0.0.1
# 或
ifconfig | grep "inet " | grep -v 127.0.0.1
# Windows
ipconfig
# 查找 IPv4 地址
```
## 🏗️ 生产构建
### 1. 构建生产版本
```bash
npm run build
```
构建完成后,会在 `dist/` 目录生成优化后的静态文件:
```
dist/
├── index.html
├── assets/
│ ├── index-[hash].js
│ ├── index-[hash].css
│ └── ...
```
### 2. 预览生产构建
在部署前,可以本地预览生产版本:
```bash
npm run preview
```
访问 `http://localhost:4173` 查看预览效果。
### 3. 构建优化
生产构建已自动启用以下优化:
- 代码压缩和混淆
- Tree-shaking移除未使用代码
- 资源压缩CSS、JS
- 代码分割(按需加载)
## 🚀 部署方式
### 静态文件部署
#### 方式一:直接部署 dist 目录
1. **构建项目**
```bash
npm run build
```
2. **上传 dist 目录**
将 `dist/` 目录下的所有文件上传到 Web 服务器
3. **配置 Web 服务器**
参考下面的 [Nginx 配置](#nginx-配置)
#### 方式二:使用 CI/CD 自动部署
**GitHub Actions 示例** (`.github/workflows/deploy.yml`):
```yaml
name: Deploy
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Build
run: npm run build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
```
### Docker 部署
#### 1. 创建 Dockerfile
在项目根目录创建 `Dockerfile`:
```dockerfile
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
# 复制 package 文件
COPY package*.json ./
# 安装依赖
RUN npm ci
# 复制源代码
COPY . .
# 构建应用
RUN npm run build
# 生产阶段
FROM nginx:alpine
# 复制构建产物到 nginx
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;"]
```
#### 2. 创建 .dockerignore
```
node_modules
dist
.git
.env
*.log
.DS_Store
```
#### 3. 构建和运行 Docker 容器
```bash
# 构建镜像
docker build -t finyx-frontend .
# 运行容器
docker run -d -p 80:80 --name finyx-app finyx-frontend
```
#### 4. 使用 Docker Compose
创建 `docker-compose.yml`:
```yaml
version: '3.8'
services:
frontend:
build: .
ports:
- "80:80"
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
```
运行:
```bash
docker-compose up -d
```
### Nginx 配置
创建 `nginx.conf` 文件:
```nginx
server {
listen 80;
server_name your-domain.com;
root /usr/share/nginx/html;
index index.html;
# Gzip 压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# SPA 路由支持
location / {
try_files $uri $uri/ /index.html;
}
# 安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# 错误页面
error_page 404 /index.html;
}
```
部署到服务器:
```bash
# 复制配置文件
sudo cp nginx.conf /etc/nginx/sites-available/finyx-frontend
# 创建软链接
sudo ln -s /etc/nginx/sites-available/finyx-frontend /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
```
## 🔐 环境变量配置
### 开发环境
创建 `.env.development`:
```env
VITE_API_BASE_URL=http://localhost:3000/api
VITE_APP_TITLE=Finyx AI Prototype (Dev)
```
### 生产环境
创建 `.env.production`:
```env
VITE_API_BASE_URL=https://api.yourdomain.com
VITE_APP_TITLE=Finyx AI Prototype
```
### 使用环境变量
在代码中使用:
```typescript
const apiUrl = import.meta.env.VITE_API_BASE_URL;
```
**注意**: Vite 要求环境变量必须以 `VITE_` 开头才能在客户端代码中访问。
## ❓ 常见问题
### 1. 端口被占用
**问题**: `Error: Port 5173 is already in use`
**解决方案**:
```bash
# 查找占用端口的进程
lsof -i :5173 # macOS/Linux
netstat -ano | findstr :5173 # Windows
# 杀死进程或使用其他端口
npm run dev -- --port 3000
```
### 1.1 无法通过 IP 地址访问
**问题**: 只能通过 localhost 访问,无法通过局域网 IP 地址访问
**解决方案**:
1. **检查配置**: 确保 `vite.config.ts` 中 `server.host` 设置为 `'0.0.0.0'`(已默认配置)
2. **检查防火墙**: 确保防火墙允许端口访问
```bash
# Ubuntu/Debian
sudo ufw allow 5173/tcp
sudo ufw reload
# CentOS/RHEL
sudo firewall-cmd --add-port=5173/tcp --permanent
sudo firewall-cmd --reload
# macOS (如果启用了防火墙)
# 系统偏好设置 > 安全性与隐私 > 防火墙 > 防火墙选项
```
3. **检查网络**: 确保设备在同一局域网内
4. **获取本机 IP**:
```bash
# Linux/macOS
ip addr show | grep "inet " | grep -v 127.0.0.1
# 或
hostname -I # Linux
ifconfig | grep "inet " | grep -v 127.0.0.1 # macOS
# Windows
ipconfig
# 查找 IPv4 地址(通常是 192.168.x.x 或 10.x.x.x
```
5. **使用 Network 地址**: 启动开发服务器后,终端会显示 Network 地址,使用该地址访问
### 2. 依赖安装失败
**问题**: `npm install` 失败或很慢
**解决方案**:
```bash
# 清除 npm 缓存
npm cache clean --force
# 删除 node_modules 和 package-lock.json 重新安装
rm -rf node_modules package-lock.json
npm install
# 或使用国内镜像
npm install --registry=https://registry.npmmirror.com
```
### 3. 构建失败
**问题**: `npm run build` 报错
**解决方案**:
- 检查 Node.js 版本是否符合要求
- 清除缓存和依赖重新安装
- 检查 TypeScript 类型错误:`npm run lint`
### 4. 路由刷新 404
**问题**: 刷新页面后出现 404
**解决方案**:
确保 Web 服务器配置了 SPA 路由支持(参考上面的 Nginx 配置)
### 5. 跨域问题
**问题**: 开发时 API 请求跨域
**解决方案**: 在 `vite.config.ts` 中配置代理:
```typescript
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
})
```
### 6. 内存不足
**问题**: 构建时内存溢出
**解决方案**:
```bash
# 增加 Node.js 内存限制
NODE_OPTIONS="--max-old-space-size=4096" npm run build
```
## 📊 性能优化建议
### 1. 代码分割
- 使用 React.lazy() 进行路由级别的代码分割
- 按需加载大型组件库
### 2. 资源优化
- 压缩图片资源
- 使用 WebP 格式
- 启用 CDN 加速静态资源
### 3. 缓存策略
- 配置合理的 HTTP 缓存头
- 使用 Service Worker 进行离线缓存
### 4. 监控和分析
- 集成性能监控工具(如 Sentry
- 使用 Web Vitals 监控核心指标
## 🔍 健康检查
部署后,可以通过以下方式检查应用状态:
```bash
# 检查 HTTP 响应
curl -I http://your-domain.com
# 检查页面内容
curl http://your-domain.com | head -20
```
## 📞 技术支持
如遇到部署问题,请:
1. 查看本文档的常见问题部分
2. 检查服务器日志
3. 联系开发团队获取支持
---
**最后更新**: 2024年
**文档版本**: 1.0.0