- 在线体验:mojian.kongdf.com
seeStrangers 是我做的一个 WebRTC 视频聊天项目,支持随机匹配、房间通话和屏幕共享。
实时通信链路基于 WebSocket,后端从 Node 迁移到 Rust + Axum,核心目标是让线上更稳、部署更省心。
技术栈
- 前端:Vue 3、Vite、Element Plus
- 后端:Rust、Axum(WebSocket 实时通信)
本地开发
后端默认监听实时通信端口(README 里是 3101),前端开发服务器一般在 3000。
启动后端:
cd backendcargo run启动前端:
cd frontendnpm installnpm run dev打包
前端
cd frontendnpm installnpm run build产物在 frontend/dist,部署时让 Nginx 这类静态服务器托管即可。
后端:在 macOS 上交叉编译 Linux(musl,便于上 CentOS)
如果你在 Mac(Apple Silicon / Intel)上开发,可以用 Zig + cargo-zigbuild 直接交叉编译 Linux 二进制(x86_64-unknown-linux-musl),这样服务器就不用再装完整 Rust 工具链了:
brew install zigcargo install cargo-zigbuildrustup target add x86_64-unknown-linux-muslcd backendcargo zigbuild --release --target x86_64-unknown-linux-musl产物路径示例:backend/target/x86_64-unknown-linux-musl/release/webrtc-backend(以仓库内实际 crate 命名为准)。
部署到 CentOS 的关键点
上传产物
把编译好的后端可执行文件和前端 dist 上传到服务器固定目录,例如:
scp backend/target/x86_64-unknown-linux-musl/release/webrtc-backend root@<SERVER_IP>:/opt/server/seeStrangers/webrtc-backendscp -r frontend/dist root@<SERVER_IP>:/opt/server/seeStrangers/frontend/用 systemd 管后端
示例单元文件 /etc/systemd/system/seestrangers.service:
[Unit]Description=seeStrangers Rust BackendAfter=network.target
[Service]Type=simpleWorkingDirectory=/opt/server/seeStrangersExecStart=/opt/server/seeStrangers/webrtc-backendRestart=alwaysRestartSec=3User=root
[Install]WantedBy=multi-user.target启动与查看状态:
chmod +x /opt/server/seeStrangers/webrtc-backendsystemctl daemon-reloadsystemctl enable --now seestrangers.servicesystemctl restart seestrangers.servicesystemctl status seestrangers.service静态站点和 WebSocket 一般交给 Nginx 做反向代理。
这块最容易踩坑的是 Upgrade、Connection 这些头,以及前端 WS_URL 和实际域名/路径不一致。常见现象就是页面能打开,但实时通信通道怎么都连不上。
常见问题(排障速记)
Exec format error:多半是二进制架构不对,比如在 Linux 上误放了 macOS 的 Mach-O。服务器上要的是 Linux 的 ELF,请确认目标 triple 和上传文件一致。status=203/EXEC:常见于ExecStart路径写错,或文件没有可执行权限(chmod +x)。- WebSocket 失败:重点核对前端
WS_URL、Nginx 的 WebSocket 反代配置、以及后端进程是否在监听(如 3101)。
小结
这次从 Node 迁到 Rust + Axum 的收益主要是稳定性和部署可控性。
如果你也在做 WebRTC 项目,建议把“实时通信链路可观测性”和“部署脚本化”优先做好,后续排障会轻松很多。
整体流程和 仓库 README 一致,你可以按自己的环境调整路径和域名。
想试玩或拉代码,直接看文首的在线地址和仓库链接即可。
部分信息可能已经过时