You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何部署React/Flask+WebSocket聊天项目?Vercel不适用该怎么办?

部署React + Flask WebSocket聊天项目的解决方案

一、后端(Flask + WebSocket)部署方案

Vercel的无服务器函数架构不支持长期维持的WebSocket连接,必须选择支持持续运行的后端平台,以下是可行选项:

1. 云虚拟机(EC2、阿里云ECS等)

适合需要完全控制权的场景,步骤如下:

  • 安装Python、pip及项目依赖:pip install flask flask-socketio flask-cors(以Flask-SocketIO为例)
  • 用支持WebSocket的异步Worker启动服务:gunicorn -w 1 -k eventlet app:app(eventlet/gevent是必须的,Flask默认服务器不支持WebSocket)
  • 配置Nginx反向代理,处理HTTP和WebSocket请求,示例配置:
    server {
        listen 443 ssl;
        server_name your-domain.com;
    
        location /socket.io {
            proxy_pass http://127.0.0.1:5000/socket.io;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    }
    
  • 配置SSL证书(如Let's Encrypt),确保用wss://协议连接,避免浏览器限制

2. PaaS平台(Render、Fly.io、Heroku)

这类平台托管长期运行的Web服务,无需自行维护服务器,以Render为例:

  • 将后端代码推送到GitHub/GitLab仓库
  • 在Render创建Web服务,关联仓库,设置构建命令pip install -r requirements.txt,启动命令gunicorn -k eventlet app:app
  • 部署完成后获得后端公网域名,直接用于WebSocket连接

3. Serverless WebSocket服务(AWS API Gateway + Lambda)

适合高并发且连接数波动大的场景,但需要修改Flask代码适配事件驱动模型,学习成本较高,不推荐小型项目使用。

二、前端(React)部署方案

React前端可以继续用Vercel或其他静态站点托管平台,也可以和后端同服务器部署:

1. 静态站点托管(Vercel/Netlify/GitHub Pages)

  • 将React代码推送到代码仓库,导入到平台自动构建部署,获得前端域名
  • 在React项目中通过环境变量配置后端WebSocket地址,比如.env文件中设置:
    REACT_APP_WS_URL=wss://your-flask-backend-domain/socket.io
    
  • 代码中使用该变量创建连接:
    import { io } from 'socket.io-client';
    const socket = io(process.env.REACT_APP_WS_URL);
    

2. 同服务器部署

将React打包后的build文件夹放到Nginx静态目录,通过Nginx同时代理前端和后端,避免跨域问题,示例Nginx配置:

server {
    listen 443 ssl;
    server_name your-domain.com;

    # 前端静态文件
    location / {
        root /path/to/react/build;
        try_files $uri $uri/ /index.html;
    }

    # WebSocket后端代理
    location /socket.io {
        proxy_pass http://127.0.0.1:5000/socket.io;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

三、WebSocket连接的关键配置

  • 跨域处理:后端用Flask-CORS配置允许前端域名访问WebSocket路径:
    from flask_cors import CORS
    app = Flask(__name__)
    CORS(app, resources={r"/socket.io/*": {"origins": "https://your-frontend-domain.com"}})
    
  • 协议匹配:前端HTTPS对应wss://,HTTP对应ws://,否则浏览器会拦截连接
  • 端口开放:云服务器需在安全组/防火墙中开放后端服务端口(如5000),PaaS平台则无需额外配置
  • 异步Worker:必须用eventlet/gevent作为Flask的Worker,否则WebSocket无法正常工作

四、全栈托管替代方案

如果不想分开部署前后端,可以选择Dokku(自托管PaaS)或Railway这类全栈平台,直接部署整个项目,简化配置流程。

内容的提问来源于stack exchange,提问作者fady jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:15:33