349 lines
6.4 KiB
Markdown
349 lines
6.4 KiB
Markdown
|
|
# AIGC 前端部署指南
|
|||
|
|
|
|||
|
|
## 环境配置说明
|
|||
|
|
|
|||
|
|
项目已配置开发和生产环境自动切换:
|
|||
|
|
|
|||
|
|
- **开发环境**: 使用 `.env.development`,API 地址为 `http://localhost:20006`
|
|||
|
|
- **生产环境**: 使用 `.env.production`,需要配置实际服务器地址
|
|||
|
|
|
|||
|
|
## 部署前准备
|
|||
|
|
|
|||
|
|
### 1. 修改生产环境配置
|
|||
|
|
|
|||
|
|
编辑 `.env.production` 文件,修改为实际的服务器地址:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 修改为你的服务器地址
|
|||
|
|
VITE_API_BASE_URL=http://your-server-ip:20006
|
|||
|
|
|
|||
|
|
# 或使用域名
|
|||
|
|
VITE_API_BASE_URL=https://api.yourdomain.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 确保后端服务已启动
|
|||
|
|
|
|||
|
|
确保后端服务在服务器上运行在 20006 端口(或你配置的端口)。
|
|||
|
|
|
|||
|
|
## 部署方式
|
|||
|
|
|
|||
|
|
### 方式一:本地构建 + 手动上传(推荐新手)
|
|||
|
|
|
|||
|
|
#### 1. 本地构建
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装依赖
|
|||
|
|
npm install
|
|||
|
|
|
|||
|
|
# 构建生产版本
|
|||
|
|
npm run build
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
构建完成后,会在项目根目录生成 `dist` 文件夹。
|
|||
|
|
|
|||
|
|
#### 2. 上传到服务器
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 打包 dist 目录
|
|||
|
|
tar -czf aigc-ui.tar.gz dist/
|
|||
|
|
|
|||
|
|
# 上传到服务器
|
|||
|
|
scp aigc-ui.tar.gz user@server:/var/www/
|
|||
|
|
|
|||
|
|
# 在服务器上解压
|
|||
|
|
ssh user@server
|
|||
|
|
cd /var/www/
|
|||
|
|
tar -xzf aigc-ui.tar.gz
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方式二:使用部署脚本(推荐)
|
|||
|
|
|
|||
|
|
#### 1. 本地构建并打包
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
chmod +x deploy.sh
|
|||
|
|
./deploy.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这会生成一个带时间戳的压缩包,例如 `aigc-ui-20231209_143022.tar.gz`。
|
|||
|
|
|
|||
|
|
#### 2. 上传并部署
|
|||
|
|
|
|||
|
|
手动上传压缩包到服务器,或使用自动部署脚本:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
chmod +x deploy-to-server.sh
|
|||
|
|
./deploy-to-server.sh user@server-ip /var/www/aigc
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方式三:服务器上直接构建
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 在服务器上克隆代码
|
|||
|
|
git clone your-repo-url /var/www/aigc
|
|||
|
|
cd /var/www/aigc/aigc-ui
|
|||
|
|
|
|||
|
|
# 修改生产环境配置
|
|||
|
|
vim .env.production
|
|||
|
|
|
|||
|
|
# 安装依赖并构建
|
|||
|
|
npm install
|
|||
|
|
npm run build
|
|||
|
|
|
|||
|
|
# dist 目录即为最终部署文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Nginx 配置
|
|||
|
|
|
|||
|
|
### 1. 安装 Nginx
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Ubuntu/Debian
|
|||
|
|
sudo apt update
|
|||
|
|
sudo apt install nginx
|
|||
|
|
|
|||
|
|
# CentOS/RHEL
|
|||
|
|
sudo yum install nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 配置 Nginx
|
|||
|
|
|
|||
|
|
复制示例配置文件:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo cp nginx.conf.example /etc/nginx/sites-available/aigc
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
编辑配置文件:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo vim /etc/nginx/sites-available/aigc
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
修改以下内容:
|
|||
|
|
- `server_name`: 改为你的域名或服务器 IP
|
|||
|
|
- `root`: 改为实际的 dist 目录路径
|
|||
|
|
- `proxy_pass`: 确保后端地址正确
|
|||
|
|
|
|||
|
|
### 3. 启用配置
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 创建软链接
|
|||
|
|
sudo ln -s /etc/nginx/sites-available/aigc /etc/nginx/sites-enabled/
|
|||
|
|
|
|||
|
|
# 测试配置
|
|||
|
|
sudo nginx -t
|
|||
|
|
|
|||
|
|
# 重启 Nginx
|
|||
|
|
sudo systemctl restart nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 配置防火墙
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 允许 HTTP 和 HTTPS
|
|||
|
|
sudo ufw allow 'Nginx Full'
|
|||
|
|
|
|||
|
|
# 或手动开放端口
|
|||
|
|
sudo ufw allow 80/tcp
|
|||
|
|
sudo ufw allow 443/tcp
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
部署后的目录结构:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
/var/www/aigc/
|
|||
|
|
├── dist/ # 前端静态文件
|
|||
|
|
│ ├── index.html
|
|||
|
|
│ ├── assets/
|
|||
|
|
│ │ ├── index-xxx.js
|
|||
|
|
│ │ └── index-xxx.css
|
|||
|
|
│ └── ...
|
|||
|
|
└── dist.backup.xxx/ # 备份的旧版本(如果有)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### 1. API 请求跨域问题
|
|||
|
|
|
|||
|
|
**方案一:使用 Nginx 代理(推荐)**
|
|||
|
|
|
|||
|
|
在 Nginx 配置中添加:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
location /api/ {
|
|||
|
|
proxy_pass http://localhost:20006;
|
|||
|
|
# ... 其他配置
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这样前端访问 `/api/xxx` 会自动代理到后端。
|
|||
|
|
|
|||
|
|
**方案二:后端配置 CORS**
|
|||
|
|
|
|||
|
|
如果前后端分离部署,需要在后端添加 CORS 支持。
|
|||
|
|
|
|||
|
|
### 2. 刷新页面 404
|
|||
|
|
|
|||
|
|
这是 SPA 应用的常见问题,需要配置 Nginx:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
location / {
|
|||
|
|
try_files $uri $uri/ /index.html;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 静态资源加载失败
|
|||
|
|
|
|||
|
|
检查 `vite.config.ts` 中的 `base` 配置:
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
export default defineConfig({
|
|||
|
|
plugins: [vue()],
|
|||
|
|
base: '/', // 根据实际部署路径调整
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 环境变量不生效
|
|||
|
|
|
|||
|
|
确保:
|
|||
|
|
- 环境变量以 `VITE_` 开头
|
|||
|
|
- 构建时使用正确的环境:`npm run build` 会自动使用 `.env.production`
|
|||
|
|
- 修改环境变量后需要重新构建
|
|||
|
|
|
|||
|
|
### 5. 后端连接失败
|
|||
|
|
|
|||
|
|
检查:
|
|||
|
|
- 后端服务是否运行:`./startup.sh status`
|
|||
|
|
- 端口是否正确:默认 20006
|
|||
|
|
- 防火墙是否开放端口:`sudo ufw allow 20006/tcp`
|
|||
|
|
- `.env.production` 中的地址是否正确
|
|||
|
|
|
|||
|
|
## 更新部署
|
|||
|
|
|
|||
|
|
### 快速更新
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 拉取最新代码
|
|||
|
|
git pull
|
|||
|
|
|
|||
|
|
# 2. 重新构建
|
|||
|
|
npm run build
|
|||
|
|
|
|||
|
|
# 3. Nginx 会自动使用新的 dist 文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 使用脚本更新
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
./deploy-to-server.sh user@server /var/www/aigc
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
脚本会自动备份旧版本。
|
|||
|
|
|
|||
|
|
## 性能优化
|
|||
|
|
|
|||
|
|
### 1. 启用 Gzip 压缩
|
|||
|
|
|
|||
|
|
在 Nginx 配置中已包含 gzip 配置。
|
|||
|
|
|
|||
|
|
### 2. 配置缓存
|
|||
|
|
|
|||
|
|
静态资源已配置 1 年缓存:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
|
|||
|
|
expires 1y;
|
|||
|
|
add_header Cache-Control "public, immutable";
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 使用 CDN
|
|||
|
|
|
|||
|
|
可以将 `dist/assets/` 下的静态资源上传到 CDN。
|
|||
|
|
|
|||
|
|
## HTTPS 配置(推荐)
|
|||
|
|
|
|||
|
|
### 使用 Let's Encrypt 免费证书
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装 Certbot
|
|||
|
|
sudo apt install certbot python3-certbot-nginx
|
|||
|
|
|
|||
|
|
# 自动配置 HTTPS
|
|||
|
|
sudo certbot --nginx -d yourdomain.com
|
|||
|
|
|
|||
|
|
# 自动续期
|
|||
|
|
sudo certbot renew --dry-run
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 监控和日志
|
|||
|
|
|
|||
|
|
### 查看 Nginx 日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 访问日志
|
|||
|
|
tail -f /var/log/nginx/aigc_access.log
|
|||
|
|
|
|||
|
|
# 错误日志
|
|||
|
|
tail -f /var/log/nginx/aigc_error.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 查看后端日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /path/to/backend
|
|||
|
|
./startup.sh logs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 回滚
|
|||
|
|
|
|||
|
|
如果新版本有问题,可以快速回滚:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /var/www/aigc
|
|||
|
|
rm -rf dist
|
|||
|
|
mv dist.backup.20231209_143022 dist
|
|||
|
|
sudo systemctl reload nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 开发环境 vs 生产环境
|
|||
|
|
|
|||
|
|
| 项目 | 开发环境 | 生产环境 |
|
|||
|
|
|------|---------|---------|
|
|||
|
|
| 命令 | `npm run dev` | `npm run build` |
|
|||
|
|
| 配置文件 | `.env.development` | `.env.production` |
|
|||
|
|
| API 地址 | `http://localhost:20006` | 实际服务器地址 |
|
|||
|
|
| 热更新 | ✅ 支持 | ❌ 不支持 |
|
|||
|
|
| 代码压缩 | ❌ 不压缩 | ✅ 压缩 |
|
|||
|
|
| Source Map | ✅ 完整 | ❌ 或简化 |
|
|||
|
|
|
|||
|
|
## 安全建议
|
|||
|
|
|
|||
|
|
1. ✅ 使用 HTTPS
|
|||
|
|
2. ✅ 配置安全响应头(已在 nginx.conf.example 中)
|
|||
|
|
3. ✅ 定期更新依赖:`npm audit fix`
|
|||
|
|
4. ✅ 不要在前端代码中硬编码敏感信息
|
|||
|
|
5. ✅ 配置 CSP(内容安全策略)
|
|||
|
|
6. ✅ 定期备份
|
|||
|
|
|
|||
|
|
## 故障排查清单
|
|||
|
|
|
|||
|
|
- [ ] 后端服务是否运行?
|
|||
|
|
- [ ] 端口是否正确?
|
|||
|
|
- [ ] 防火墙是否开放?
|
|||
|
|
- [ ] Nginx 配置是否正确?
|
|||
|
|
- [ ] 环境变量是否配置?
|
|||
|
|
- [ ] 是否重新构建?
|
|||
|
|
- [ ] 浏览器控制台有无错误?
|
|||
|
|
- [ ] 网络请求是否成功?
|
|||
|
|
|
|||
|
|
## 联系支持
|
|||
|
|
|
|||
|
|
如遇问题,请检查:
|
|||
|
|
1. 浏览器控制台错误信息
|
|||
|
|
2. Nginx 错误日志
|
|||
|
|
3. 后端服务日志
|