更新
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
# 宝塔部署 Web 端说明
|
||||
|
||||
## 一、构建前配置
|
||||
|
||||
### 1. 配置后端 API 地址
|
||||
|
||||
编辑 `config/prod.env.js`,将 `BASE_API` 改为实际的后端接口地址:
|
||||
|
||||
```javascript
|
||||
module.exports = {
|
||||
NODE_ENV: '"production"',
|
||||
BASE_API: '"https://your-api-domain.com/api"', // 改为实际后端地址
|
||||
VUE_APP_SOCKET_API: '"ws://127.0.0.1:10010"' // WebSocket 默认地址(用户可在登录页修改)
|
||||
}
|
||||
```
|
||||
|
||||
**注意:**
|
||||
- `BASE_API` 是 HTTP 接口地址(登录、数据请求等)
|
||||
- `VUE_APP_SOCKET_API` 是 WebSocket 默认地址,用户可在登录页修改,所以这里可以保持默认或设为公网地址
|
||||
|
||||
### 2. 执行构建
|
||||
|
||||
在项目根目录执行:
|
||||
|
||||
```bash
|
||||
npm run build:web
|
||||
```
|
||||
|
||||
构建完成后,产物在 `dist/web/` 目录下,包含:
|
||||
- `index.html`(入口文件)
|
||||
- `web.js`(主 JS 文件,包含所有代码和样式)
|
||||
- `1.js` ~ `7.js`(代码分割的 chunk 文件)
|
||||
- `fonts/`(字体文件)
|
||||
- `imgs/`(图片资源)
|
||||
|
||||
**注意**:CSS 样式被打包进 `web.js` 中,运行时动态注入,无需单独引用 CSS 文件。
|
||||
|
||||
---
|
||||
|
||||
## 二、宝塔部署步骤
|
||||
|
||||
### 1. 创建网站
|
||||
|
||||
1. 登录宝塔面板
|
||||
2. 点击「网站」→「添加站点」
|
||||
3. 填写:
|
||||
- **域名**:例如 `your-domain.com` 或 `192.168.1.100`(内网 IP)
|
||||
- **根目录**:例如 `/www/wwwroot/your-domain.com`
|
||||
- **PHP 版本**:选择「纯静态」或任意版本(前端不需要 PHP)
|
||||
|
||||
### 2. 上传文件
|
||||
|
||||
将 `dist/web/` 目录下的**所有文件**上传到网站根目录:
|
||||
|
||||
```
|
||||
/www/wwwroot/your-domain.com/
|
||||
├── index.html
|
||||
├── web.js
|
||||
├── styles.css
|
||||
└── static/
|
||||
├── imgs/
|
||||
└── fonts/
|
||||
```
|
||||
|
||||
**上传方式:**
|
||||
- 方式一:在宝塔「文件」中直接上传压缩包并解压
|
||||
- 方式二:使用 FTP/SFTP 工具上传
|
||||
- 方式三:使用宝塔「终端」执行 `scp` 或 `rsync` 命令
|
||||
|
||||
### 3. 配置 Nginx(重要)
|
||||
|
||||
由于是 Vue Router 的 hash 模式(`#/login`、`#/manage`),通常不需要特殊配置。但建议添加以下配置以确保正常访问:
|
||||
|
||||
在宝塔「网站」→ 选择站点 →「设置」→「配置文件」中,在 `server` 块内添加:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
root /www/wwwroot/your-domain.com;
|
||||
index index.html;
|
||||
|
||||
# 前端路由支持(hash 模式通常不需要,但加上更稳妥)
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# 静态资源缓存
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
# 禁止访问隐藏文件
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 配置 HTTPS(可选但推荐)
|
||||
|
||||
如果使用域名且需要 HTTPS:
|
||||
|
||||
1. 在宝塔「网站」→ 选择站点 →「SSL」→「Let's Encrypt」申请免费证书
|
||||
2. 开启「强制 HTTPS」
|
||||
3. **注意**:如果后端 API 或 WebSocket 使用 HTTPS/WSS,确保:
|
||||
- `BASE_API` 使用 `https://`
|
||||
- WebSocket 地址使用 `wss://`(或在登录页填写 `wss://` 地址)
|
||||
|
||||
### 5. 配置跨域(如需要)
|
||||
|
||||
如果后端 API 与前端不在同一域名,后端需要配置 CORS:
|
||||
|
||||
- 允许的源:`https://your-domain.com`(或 `*` 用于开发)
|
||||
- 允许的请求头:`Content-Type, X-Token`(根据实际后端要求)
|
||||
- 允许的方法:`GET, POST, PUT, DELETE` 等
|
||||
|
||||
---
|
||||
|
||||
## 三、WebSocket 配置
|
||||
|
||||
### 情况 1:WebSocket 服务在服务器本机
|
||||
|
||||
如果 WebSocket 服务运行在**宝塔服务器本机**(例如 `ws://127.0.0.1:10010`):
|
||||
|
||||
- 用户访问网页时,浏览器会尝试连接**用户电脑**的 `127.0.0.1`,**无法连接**
|
||||
- **解决方案**:
|
||||
1. 在登录页填写 `ws://服务器公网IP:10010` 或 `ws://服务器域名:10010`
|
||||
2. 或配置 Nginx 反向代理 WebSocket(见下方)
|
||||
|
||||
### 情况 2:使用 Nginx 反向代理 WebSocket(推荐)
|
||||
|
||||
在宝塔「网站」→ 选择站点 →「设置」→「配置文件」中添加:
|
||||
|
||||
```nginx
|
||||
# WebSocket 代理(假设后端 WebSocket 在 127.0.0.1:10010)
|
||||
location /ws {
|
||||
proxy_pass http://127.0.0.1:10010;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
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;
|
||||
}
|
||||
```
|
||||
|
||||
然后在登录页填写:`wss://your-domain.com/ws`(HTTPS 用 `wss://`,HTTP 用 `ws://`)
|
||||
|
||||
### 情况 3:WebSocket 服务在公网服务器
|
||||
|
||||
如果 WebSocket 服务部署在**公网服务器**(例如 `wss://ws-api.xxx.com`):
|
||||
|
||||
- 在登录页填写该地址即可
|
||||
- 或在构建时设置 `VUE_APP_SOCKET_API` 为 `wss://ws-api.xxx.com`
|
||||
|
||||
---
|
||||
|
||||
## 四、访问测试
|
||||
|
||||
1. 打开浏览器访问:`http://your-domain.com` 或 `https://your-domain.com`
|
||||
2. 应能看到登录页
|
||||
3. 点击「设置 WebSocket 服务地址」,填写实际可访问的 WebSocket 地址
|
||||
4. 输入账号密码登录
|
||||
5. 检查:
|
||||
- 登录是否成功
|
||||
- WebSocket 是否连接成功(查看浏览器控制台 Network → WS)
|
||||
- 各功能页面是否正常加载
|
||||
|
||||
---
|
||||
|
||||
## 五、常见问题
|
||||
|
||||
### 1. 页面空白
|
||||
|
||||
- **检查**:浏览器控制台是否有 JS 错误
|
||||
- **解决**:确认 `index.html` 中引用的 `web.js`、`styles.css` 路径正确;检查 Nginx 配置是否正确
|
||||
|
||||
### 2. 接口请求失败(404 或 CORS)
|
||||
|
||||
- **检查**:`BASE_API` 是否正确;后端是否允许跨域
|
||||
- **解决**:修改 `config/prod.env.js` 中的 `BASE_API` 后重新构建;后端配置 CORS
|
||||
|
||||
### 3. WebSocket 连接失败
|
||||
|
||||
- **检查**:浏览器控制台 Network → WS,查看连接地址和错误信息
|
||||
- **解决**:
|
||||
- 确认 WebSocket 服务已启动
|
||||
- 在登录页填写正确的地址(本机用 `ws://127.0.0.1:10010`,服务器用 `ws://服务器IP:10010`,HTTPS 用 `wss://`)
|
||||
- 如使用 Nginx 代理,确认代理配置正确
|
||||
|
||||
### 4. 静态资源 404
|
||||
|
||||
- **检查**:`static/` 目录是否上传完整
|
||||
- **解决**:重新上传 `dist/web/static/` 目录
|
||||
|
||||
### 5. 路由跳转异常
|
||||
|
||||
- **检查**:Nginx 配置中是否有 `try_files $uri $uri/ /index.html;`
|
||||
- **解决**:添加该配置后重启 Nginx
|
||||
|
||||
---
|
||||
|
||||
## 六、更新部署
|
||||
|
||||
当代码更新后:
|
||||
|
||||
1. 修改 `config/prod.env.js`(如需要)
|
||||
2. 执行 `npm run build:web`
|
||||
3. 将 `dist/web/` 下的文件**覆盖上传**到宝塔网站根目录
|
||||
4. 清除浏览器缓存或强制刷新(Ctrl+F5)
|
||||
|
||||
---
|
||||
|
||||
## 七、总结
|
||||
|
||||
- **构建产物**:`dist/web/` 目录
|
||||
- **上传位置**:宝塔网站根目录
|
||||
- **配置要点**:
|
||||
- `BASE_API`:后端 HTTP 接口地址
|
||||
- WebSocket:用户可在登录页配置,或通过 Nginx 反向代理
|
||||
- **访问方式**:`http(s)://your-domain.com`
|
||||
|
||||
部署完成后,用户访问网站即可使用,首次登录时记得在登录页配置 WebSocket 服务地址。
|
||||
Reference in New Issue
Block a user