docs: 完善部署说明文档,补充 Octane 代理说明及 WebSocket 协议升级避坑指南

This commit is contained in:
pllx
2026-06-30 14:20:55 +08:00
parent 9fd7b14ec7
commit d8cb75d282
2 changed files with 93 additions and 56 deletions
+70 -44
View File
@@ -186,52 +186,66 @@ php artisan view:cache
### 6. Nginx 配置
在宝塔面板的 Nginx 配置中,需要添加 WebSocket 反向代理。
为了让外界能够通过 HTTPS 正常访问常驻内存服务器(Roadrunner 8000端口)以及实时 WebSocket 广播(Reverb 8080端口),需要在宝塔面板的 Nginx 配置中进行反向代理。
**第一步:** `server {}`**外面上方**添加
`server {}` 块**内部**`#REWRITE-END` 之后,禁止访问敏感文件之前)添加以下配置
```nginx
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# ── 1. 静态资源优先由 Nginx 直接响应,动态请求分流给 Octane ──
location / {
try_files $uri $uri/ @octane;
}
# ── 2. API、心跳等动态请求反向代理到本地 8000 端口 (Octane / Roadrunner) ──
location @octane {
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
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;
proxy_pass http://127.0.0.1:8000;
}
# ── 3. ⚡ WebSocket 实时广播反向代理 (Laravel Reverb 8080端口) ──
# 浏览器通过 /app 和 /apps 路径发起 WebSocket 连接
location /app {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
# 避坑提示:某些宝塔环境全局未配置 $connection_upgrade 变量,
# 直接写死 "Upgrade" 能 100% 避免 500 代理握手失败。
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;
# WebSocket 长连接保活:120秒无数据才断开
proxy_read_timeout 120s;
proxy_send_timeout 120s;
proxy_buffering off;
}
location /apps {
proxy_pass http://127.0.0.1:8080;
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;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
proxy_buffering off;
}
```
**第二步:** 在 `server {}` 块**内部**`#REWRITE-END` 之后)添加:
```nginx
location /app {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $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;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
proxy_buffering off;
}
location /apps {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $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;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
proxy_buffering off;
}
```
**第三步:** 在宝塔面板 → 网站 → 伪静态中选择 `laravel5`
**第四步:** 测试并重载 Nginx:
**测试并重载 Nginx**
```bash
nginx -t && systemctl reload nginx
@@ -241,7 +255,7 @@ nginx -t && systemctl reload nginx
### 7. Supervisor 守护进程(关键!)
在宝塔面板 → 软件商店 → 安装「Supervisor管理器」,然后添加个守护进程:
在宝塔面板 → 软件商店 → 安装「Supervisor管理器」,然后添加个守护进程,确保长连接和心跳在后台持续运行
#### 进程一:Laravel ReverbWebSocket 服务器)
@@ -250,6 +264,7 @@ nginx -t && systemctl reload nginx
| 名称 | `chatroom-reverb` |
| 运行目录 | `/www/wwwroot/chat.ay.lc` |
| 启动命令 | `php artisan reverb:start` |
| 运行用户 | `www` |
| 进程数量 | `1` |
#### 进程二:Laravel Horizon(队列处理器)
@@ -259,12 +274,23 @@ nginx -t && systemctl reload nginx
| 名称 | `chatroom-horizon` |
| 运行目录 | `/www/wwwroot/chat.ay.lc` |
| 启动命令 | `php artisan horizon` |
| 运行用户 | `www` |
| 进程数量 | `1` |
#### 进程三:Laravel OctaneRoadrunner 常驻内存服务)
| 配置项 | 值 |
| -------- | ---------------------------------------------------------- |
| 名称 | `chatroom-octane` |
| 运行目录 | `/www/wwwroot/chat.ay.lc` |
| 启动命令 | `php artisan octane:start --server=roadrunner --port=8000` |
| 运行用户 | `www` |
| 进程数量 | `1` |
> ⚠️ **如果不配置 Supervisor**
>
> - 关闭 SSH 终端后,ReverbHorizon 会立刻停止
> - 聊天室将无法发送/接收消息,在线列表为空
> - 关闭 SSH 终端后,ReverbHorizon 和 Octane 会立刻停止运行,导致聊天室无法打开或无法收发消息!
> - **更新代码后**:当您在服务器上完成 `git pull` 后,需要运行 `php artisan octane:reload` 重新载入内存,代码才会生效。
---