298 lines
6.8 KiB
Markdown
298 lines
6.8 KiB
Markdown
|
|
# H5 版本部署文档
|
|||
|
|
|
|||
|
|
本文档介绍如何将项目编译成 H5 版本并部署到服务器,通过 Nginx 运行和代理访问。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 前置要求
|
|||
|
|
|
|||
|
|
### 环境要求
|
|||
|
|
|
|||
|
|
- **Node.js**: >= 20
|
|||
|
|
- **pnpm**: >= 9(必须使用 pnpm)
|
|||
|
|
- **Nginx**: 已安装并运行(用于部署)
|
|||
|
|
|
|||
|
|
### 服务器要求
|
|||
|
|
|
|||
|
|
- Linux/Unix 服务器
|
|||
|
|
- 已安装 Nginx
|
|||
|
|
- 有权限访问服务器文件系统
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 部署步骤
|
|||
|
|
|
|||
|
|
### 1. 构建 H5 版本
|
|||
|
|
|
|||
|
|
在项目根目录执行以下命令进行构建:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 生产环境构建(推荐)
|
|||
|
|
pnpm build:h5:prod
|
|||
|
|
|
|||
|
|
# 或者使用默认构建命令
|
|||
|
|
pnpm build:h5
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
构建完成后,文件会输出到 `dist/build/h5` 目录。
|
|||
|
|
|
|||
|
|
### 2. 配置环境变量(可选)
|
|||
|
|
|
|||
|
|
如果您的应用需要部署在子目录下,或者需要修改其他配置,请编辑 `env/.env.production` 文件:
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
# 应用标题
|
|||
|
|
VITE_APP_TITLE=芋道管理后台
|
|||
|
|
|
|||
|
|
# 后端 API 地址
|
|||
|
|
VITE_SERVER_BASEURL=https://your-backend-api.com
|
|||
|
|
|
|||
|
|
# H5 路由基础路径
|
|||
|
|
# 如果部署在根目录,设置为 /
|
|||
|
|
# 如果部署在子目录(如 /app/),设置为 /app/
|
|||
|
|
VITE_APP_PUBLIC_BASE=/
|
|||
|
|
|
|||
|
|
# 其他配置...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**重要提示:**
|
|||
|
|
- 如果部署在根目录,`VITE_APP_PUBLIC_BASE` 设置为 `/`
|
|||
|
|
- 如果部署在子目录(如 `/app/`),`VITE_APP_PUBLIC_BASE` 设置为 `/app/`
|
|||
|
|
- 修改后需要重新构建:`pnpm build:h5:prod`
|
|||
|
|
|
|||
|
|
### 3. 上传文件到服务器
|
|||
|
|
|
|||
|
|
将 `dist/build/h5` 目录下的所有文件上传到服务器。
|
|||
|
|
|
|||
|
|
**方式一:使用 scp 命令**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 上传整个目录到服务器
|
|||
|
|
scp -r dist/build/h5/* user@your-server:/path/to/nginx/html/
|
|||
|
|
|
|||
|
|
# 或者上传到子目录
|
|||
|
|
scp -r dist/build/h5/* user@your-server:/path/to/nginx/html/app/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**方式二:使用 rsync 命令(推荐)**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 同步文件到服务器
|
|||
|
|
rsync -avz dist/build/h5/ user@your-server:/path/to/nginx/html/
|
|||
|
|
|
|||
|
|
# 或者同步到子目录
|
|||
|
|
rsync -avz dist/build/h5/ user@your-server:/path/to/nginx/html/app/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**方式三:使用 FTP/SFTP 工具**
|
|||
|
|
|
|||
|
|
使用 FileZilla、WinSCP 等工具上传文件。
|
|||
|
|
|
|||
|
|
### 4. 配置 Nginx
|
|||
|
|
|
|||
|
|
#### 4.1 部署在根目录(推荐)
|
|||
|
|
|
|||
|
|
1. 复制 `nginx.conf.example` 文件中的第一个 server 配置块
|
|||
|
|
2. 修改以下配置:
|
|||
|
|
- `server_name`: 改为您的域名或 IP
|
|||
|
|
- `root`: 改为实际的文件路径(指向 `dist/build/h5` 目录)
|
|||
|
|
3. 将配置添加到 Nginx 配置文件(通常在 `/etc/nginx/sites-available/` 或 `/etc/nginx/conf.d/`)
|
|||
|
|
|
|||
|
|
**示例配置:**
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name your-domain.com;
|
|||
|
|
|
|||
|
|
root /var/www/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/x-javascript application/xml+rss application/json application/javascript;
|
|||
|
|
|
|||
|
|
# 静态资源缓存
|
|||
|
|
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
|||
|
|
expires 1y;
|
|||
|
|
add_header Cache-Control "public, immutable";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Vue Router History 模式支持
|
|||
|
|
location / {
|
|||
|
|
try_files $uri $uri/ /index.html;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4.2 部署在子目录
|
|||
|
|
|
|||
|
|
如果您的应用需要部署在子目录下(如 `/app/`):
|
|||
|
|
|
|||
|
|
1. 确保 `env/.env.production` 中 `VITE_APP_PUBLIC_BASE=/app/`
|
|||
|
|
2. 重新构建:`pnpm build:h5:prod`
|
|||
|
|
3. 上传文件到服务器的 `/app/` 目录
|
|||
|
|
4. 使用 `nginx.conf.example` 中的第二个 server 配置块
|
|||
|
|
|
|||
|
|
#### 4.3 配置 API 代理(可选)
|
|||
|
|
|
|||
|
|
如果后端 API 需要通过 Nginx 代理,取消注释并修改 API 代理配置:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
location /api/ {
|
|||
|
|
proxy_pass http://your-backend-server:port;
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|||
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|||
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 测试 Nginx 配置
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 测试 Nginx 配置文件语法
|
|||
|
|
sudo nginx -t
|
|||
|
|
|
|||
|
|
# 如果测试通过,重新加载 Nginx 配置
|
|||
|
|
sudo nginx -s reload
|
|||
|
|
|
|||
|
|
# 或者重启 Nginx
|
|||
|
|
sudo systemctl restart nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. 访问应用
|
|||
|
|
|
|||
|
|
在浏览器中访问:
|
|||
|
|
- 如果部署在根目录:`http://your-domain.com`
|
|||
|
|
- 如果部署在子目录:`http://your-domain.com/app/`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 常见问题
|
|||
|
|
|
|||
|
|
### 1. 页面刷新后 404 错误
|
|||
|
|
|
|||
|
|
**问题:** 刷新页面或直接访问路由时出现 404 错误。
|
|||
|
|
|
|||
|
|
**解决方案:** 确保 Nginx 配置了 `try_files` 指令:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
location / {
|
|||
|
|
try_files $uri $uri/ /index.html;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 静态资源加载失败
|
|||
|
|
|
|||
|
|
**问题:** CSS、JS 等静态资源无法加载。
|
|||
|
|
|
|||
|
|
**解决方案:**
|
|||
|
|
- 检查 `VITE_APP_PUBLIC_BASE` 配置是否正确
|
|||
|
|
- 检查文件路径是否正确上传
|
|||
|
|
- 检查 Nginx 的 `root` 配置是否正确
|
|||
|
|
|
|||
|
|
### 3. API 请求跨域问题
|
|||
|
|
|
|||
|
|
**问题:** 前端请求后端 API 时出现跨域错误。
|
|||
|
|
|
|||
|
|
**解决方案:**
|
|||
|
|
- 在 Nginx 中配置 API 代理(推荐)
|
|||
|
|
- 或者在后端配置 CORS 允许跨域
|
|||
|
|
|
|||
|
|
### 4. 部署在子目录后路由不工作
|
|||
|
|
|
|||
|
|
**问题:** 部署在子目录后,路由跳转不正确。
|
|||
|
|
|
|||
|
|
**解决方案:**
|
|||
|
|
- 确保 `env/.env.production` 中 `VITE_APP_PUBLIC_BASE` 设置为正确的子目录路径(如 `/app/`)
|
|||
|
|
- 重新构建项目
|
|||
|
|
- 确保 Nginx 配置正确
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 完整部署示例
|
|||
|
|
|
|||
|
|
### 示例:部署到根目录
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 构建项目
|
|||
|
|
pnpm build:h5:prod
|
|||
|
|
|
|||
|
|
# 2. 上传到服务器
|
|||
|
|
rsync -avz dist/build/h5/ user@server:/var/www/html/
|
|||
|
|
|
|||
|
|
# 3. 在服务器上配置 Nginx(参考上面的配置)
|
|||
|
|
|
|||
|
|
# 4. 测试并重载 Nginx
|
|||
|
|
sudo nginx -t
|
|||
|
|
sudo nginx -s reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 示例:部署到子目录 `/app/`
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 修改环境变量
|
|||
|
|
# 编辑 env/.env.production,设置 VITE_APP_PUBLIC_BASE=/app/
|
|||
|
|
|
|||
|
|
# 2. 重新构建
|
|||
|
|
pnpm build:h5:prod
|
|||
|
|
|
|||
|
|
# 3. 上传到服务器子目录
|
|||
|
|
rsync -avz dist/build/h5/ user@server:/var/www/html/app/
|
|||
|
|
|
|||
|
|
# 4. 在服务器上配置 Nginx(使用子目录配置)
|
|||
|
|
|
|||
|
|
# 5. 测试并重载 Nginx
|
|||
|
|
sudo nginx -t
|
|||
|
|
sudo nginx -s reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔒 HTTPS 配置(推荐生产环境)
|
|||
|
|
|
|||
|
|
生产环境建议使用 HTTPS,可以参考 `nginx.conf.example` 中的 HTTPS 配置示例。
|
|||
|
|
|
|||
|
|
使用 Let's Encrypt 免费证书:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装 certbot
|
|||
|
|
sudo apt-get install certbot python3-certbot-nginx
|
|||
|
|
|
|||
|
|
# 获取证书
|
|||
|
|
sudo certbot --nginx -d your-domain.com
|
|||
|
|
|
|||
|
|
# 证书会自动配置,并设置自动续期
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📚 相关文档
|
|||
|
|
|
|||
|
|
- [项目启动文档](./启动文档.md)
|
|||
|
|
- [构建文档](./docs/base/11-build.md)
|
|||
|
|
- [环境变量配置](./docs/base/12-env.md)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 检查清单
|
|||
|
|
|
|||
|
|
部署前请确认:
|
|||
|
|
|
|||
|
|
- [ ] 已构建 H5 版本(`pnpm build:h5:prod`)
|
|||
|
|
- [ ] 已配置正确的环境变量(特别是 `VITE_APP_PUBLIC_BASE`)
|
|||
|
|
- [ ] 已上传文件到服务器
|
|||
|
|
- [ ] 已配置 Nginx(包括 `try_files` 指令)
|
|||
|
|
- [ ] 已测试 Nginx 配置(`nginx -t`)
|
|||
|
|
- [ ] 已重载 Nginx 配置
|
|||
|
|
- [ ] 已测试访问应用
|
|||
|
|
- [ ] 已测试页面刷新功能
|
|||
|
|
- [ ] 已测试 API 请求(如果配置了代理)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**部署完成后,您就可以通过浏览器访问您的应用了!** 🎉
|