Skip to content

生产环境部署指南 (Deployment)

在生产环境中部署 WebSocket 服务,我们需要关注安全性、稳定性和性能。以下是基于 Nginx 和 Supervisor 的标准部署方案。

1. 基础设施要求

  • Redis: 用于多节点间的消息同步(集群模式必须)。
  • Nginx: 充当 SSL 终结和反向代理。
  • Supervisor / Systemd: 用于进程守护。

2. 进程管理 (Supervisor)

使用 Supervisor 确保 WebSocket 服务进程在后台持续运行。

创建配置文件 /etc/supervisor/conf.d/websocket.conf:

```ini [program:websocket-server] process_name=%(program_name)s

替换为你的实际启动命令,例如 ./server 或 php artisan reverb:start

command=/path/to/your/websocket-server --port=8080 autostart=true autorestart=true user=www-data

建议将日志重定向到单独的文件

stderr_logfile=/var/log/websocket.err.log stdout_logfile=/var/log/websocket.out.log

增加打开文件描述符的限制,这对高并发 WebSocket 服务至关重要

minfds=10000 ```

应用配置:

```bash sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start websocket-server ```

3. Nginx 反向代理配置

为了支持 wss:// (SSL/TLS) 并隐藏服务的内部端口,我们需要配置 Nginx 作为反向代理。

```nginx server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ws.example.com; # 你的 WebSocket 域名

# SSL 证书配置 (建议使用 Let's Encrypt / Certbot 自动生成)
ssl_certificate /etc/letsencrypt/live/ws.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ws.example.com/privkey.pem;

# 推荐的 SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

location / {
    # 转发到本地 WebSocket 服务端口 (默认 8080)
    proxy_pass http://127.0.0.1:8080;
    
    # WebSocket 必须的头部
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    
    # 传递真实 IP
    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 https;
    
    # 增加读取超时时间,防止长连接被 Nginx 切断
    proxy_read_timeout 60s;
    proxy_send_timeout 60s;
}

} ```

4. 端口调优 (Linux Kernel)

对于高并发场景(超过 10k 连接),可能需要调整内核参数以允许更多打开的文件和端口。

编辑 /etc/sysctl.conf:

```bash fs.file-max = 100000 net.ipv4.ip_local_port_range = 1024 65535 net.core.somaxconn = 65535 ```

应用更改:sudo sysctl -p