基于WebRTC/WebSocket的文件传输:
- 局域网内可以互相发现,不需要手动输入对方
IP地址等信息。 - 多个设备中的任意两个设备之间可以相互传输文本消息与文件数据。
- 设备间的数据传输采用基于
WebRTC的P2P方案,无需服务器中转数据。 - 跨局域网传输且
NAT穿越受限的情况下,基于WebSocket服务器中转传输。 - 基于
ServiceWorker实现文件数据劫持流式传输方案,可支持大型文件下载。
WebRTC.mp4
$ pnpm install --frozen-lockfile
$ npm run dev:webrtc
$ npm run dev:webrtc-im
$ npm run dev:websocket$ pnpm install --frozen-lockfile
$ npm run deploy:webrtc
$ npm run deploy:webrtc-im
$ npm run deploy:websocket-
推送代码到 GitHub
git add . git commit -m "Add Zeabur deployment configuration" git push origin main
-
在 Zeabur 控制台部署
- 访问 Zeabur
- 连接你的 GitHub 仓库
- 选择
FileTransfer项目 - Zeabur 会自动检测
Dockerfile并进行容器化部署
-
配置环境变量 在 Zeabur 控制台中设置以下环境变量:
SUPABASE_URL: 你的 Supabase 项目 URLSUPABASE_ANON: Supabase 匿名密钥SUPABASE_CHANNEL: WebRTC 信令频道名称TURN_ICE: TURN 服务器配置(JSON 字符串)
-
自定义域名(可选)
- 在 Zeabur 控制台中绑定自定义域名
- 配置 HTTPS 证书(Zeabur 自动提供)
To enable reliable WebRTC connections across NATs/firewalls, deploy a TURN server.
- On a public VM (Ubuntu/Debian), install Docker and Docker Compose.
- Copy
infra/turnto the server and setexternal-ipinturnserver.confto your public IP. - Choose auth mode:
- Secret-based (TURN REST): keep
use-auth-secretand setstatic-auth-secret. - Static credentials: comment out
use-auth-secretlines and uselt-cred-mech+user=ftuser:ftpass.
- Secret-based (TURN REST): keep
- Open firewall ports:
3478TCP/UDP and optional5349TCP/UDP. If you set relay port range (min-port/max-port), open that range too. - Run:
docker compose up -dinsideinfra/turn.
Use https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ with:
- STUN/TURN URL:
turn:<your-public-ip>:3478(orturns:on 5349) - Username/Password (if static creds), or generate short-term credentials for REST.
Set TURN_ICE in Vercel Environment Variables to a JSON string, for example:
[
{"urls":"stun:stun.l.google.com:19302"},
{"urls":"turn:<your-public-ip>:3478","username":"ftuser","credential":"ftpass"}
]
For TURN REST mode, build ephemeral creds on the server and inject at runtime.