## 从零打造 P2P 视频服务:在 1 核 VPS 上开发 9 个月
在九个月的业余时间里,一位来自偏远地区的电工创建了一个功能齐全的 P2P 视频服务“Vizavi”——无需注册或安装应用。从配置简陋的 VPS(1 核,512 MB 内存)上从零构建而成,它利用 WebRTC 实现直接点对点连接,并能绕过封锁。最终成果:一个基于浏览器的解决方案,配备俄罗斯域名,即使在本地网络限制下也能正常运行。
从创意到现实:Vizavi 的诞生过程
项目源于创建者遭遇主流视频服务被封锁,不得不寻找替代方案。在实验神经网络时,灵感乍现:“能不能做一个视频通话工具?”作者深入钻研 WebRTC 基础、STUN/TURN 服务器以及 ICE 候选等技术。第一通成功测试通话点燃了进一步开发的热情。亮点功能:无需注册或安装应用——直接在浏览器中使用简短数字房间码即可连接。
架构采用“房间模式”:用户在 https://vizavi.rf/ 输入房间号,一旦两人进入,系统即自动连接。房间码分享由用户自行负责——通过消息应用、电话通话,甚至面对面交流。这大大降低了使用门槛:只需点击链接并授权摄像头/麦克风访问即可。
技术栈:极简主义哲学
服务运行在莫斯科数据中心租用的 VPS 上,配置最低限度:
- 1 个 CPU 核心
- 512 MB 内存
- 10 GB SSD 磁盘(已用 3.3 GB)
- 操作系统 Debian 11
基础设施包括:
- Coturn —— 自建 STUN/TURN 服务器,用于 NAT 穿越
- Node.js(信令服务器)由 PM2 管理
- Nginx 作为反向代理
- 来自 Let’s Encrypt 的 SSL,支持自动续期
- UFW 和 Fail2Ban 用于基本安全防护
- 客户端和服务器逻辑采用原生 JavaScript
- Express 处理静态文件和 REST API
- Socket.io 用于实时 WebRTC 信令
数据存储采用 JSON 文件,而非传统数据库。这适应了服务器有限资源,并简化了部署。自制管理面板可显示实时连接统计,并监控活动情况。
房间类型:从基础到 VIP
系统支持三种房间类型:
- 标准房间 — 两人基础设置。输入相同号码,即自动连接。无通话录音、IP 日志或消息存储。
- VIP 房间 — 增加层级控制:房主管理聊天、录音会议,并可踢出访客。访客支持屏幕共享和文件发送。包含多人连接队列以及入口留言板。
- 观察房间(开发中)— 类似于“婴儿监视器”:一台设备充当摄像头,另一台作为查看器。计划将旧智能手机改造成视频源。
核心优势:连接前无需额外步骤。不像要求注册或输入用户名的竞争对手,Vizavi 输入房间码即可即时连接用户。
安全与隐私:当前状态
WebRTC 自带端到端加密,保障音频和视频流安全。不过,仍有一些地方需改进:
- 聊天历史以明文形式存储在浏览器的 localStorage 中
- VIP 入口消息保存在未加密的 JSON 文件中
- 房间访问无认证机制
作者强调,这并非针对敏感数据设计,但承认需加强防护。在资源受限的 VPS(512 MB 内存)上,引入完整加密需权衡安全与性能。
开发者关键心得
- 架构极简 — 使用 JSON 替代数据库、摒弃不必要依赖,对低端 VPS 运行至关重要。
- 信令服务器灵活性 — Socket.io 能平稳处理 WebRTC 信号,即便面对大量机器人和扫描器流量。
- 用户体验 — 省略注册或输入姓名等步骤,能立即提升参与度。
- 安全是持续过程 — UFW 和 Fail2Ban 等基础工具必不可少,但需定期审计。
系统需应对持续的扫描器和机器人探测,因此会过滤它们:非浏览器客户端仅收到无 JavaScript 的精简 HTML 页面。这能减轻服务器负载,并有助于 SEO。
这个项目证明,WebRTC 等技术对初学者开发者来说触手可及。成功源于分阶段构建、专注核心功能,并充分利用现成工具(Coturn、Let’s Encrypt)。下一步计划:消息加密以及支持更多并发连接。
— Editorial Team
暂无评论。