FilePizza 上线体检5 项检查让 P2P 文件传输 Demo 走向生产【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizzaFilePizza 是一个基于 WebRTC 的 P2P 文件传输应用浏览器直连浏览器文件不经中转服务器上传。它在你笔记本上跑得通但跑得通不等于能上线——部署之后渠道链接、NAT 穿透、Service Worker 各自藏着一处暗雷。它是什么FilePizza 的能力版图浏览器到浏览器直连传输PeerJS 封装 WebRTCDTLS 加密文件不落自家服务器长短两种链接8 位随机短链 4 个单词的可读长链同一链接支持多人并发下载多文件上传即时打包成 zip经 Service Worker 流式写入磁盘可选密码保护、违规举报入口技术栈Next.js 15App Router、React 19、Tailwind v4Redis 存渠道状态可选COTURN 提供中继内置开发与生产两套 Docker Compose 编排30 秒跑起来Node.js 18 与 pnpm要测完整 WebRTC 链路还需本地 Redis 与 COTURN。git clone https://gitcode.com/GitHub_Trending/fi/filepizza cd filepizza pnpm install pnpm dev # 本地体验pnpm dev:full 会同时拉起 Redis COTURN数据与权限检查转移链接如何不丢、不被随意删渠道状态默认存在进程内存里如何开启持久化现象上传链接当场下载没问题服务重启、或扩到两台实例后链接页直接 404。定位src/channel.ts 的getOrCreateChannelRepo()——未设置REDIS_URL时用MemoryChannelRepo渠道信息只存进程内 Map。影响单实例重启等于清空所有进行中的链接负载均衡时下载请求可能落到不知道这条链接的那个进程上。修复设置REDIS_URL指向可用的 Redis两个 compose 文件里 redis 服务现成照抄即可。删除链接的接口对所有人开放现象链接发到群里群里有人调用一次删除接口传输立刻失效。定位src/app/api/destroy/route.ts注释写明设计意图——让举报违规者能删掉链接只凭 slug 即可、无鉴权。影响⚠️ 链接即凭证。拿到 URL 的人——包括爬过公开聊天记录的外方——都能让它消失。修复最小改动是给该路由加 IP 限流并记录删除日志若不接受此设计改为校验上传者持有的 secret 才放行。WebRTC 连接检查NAT 穿透如何正确配置默认只有公共 STUN没有 TURN现象家里宽带直连正常运营商级 NAT 下转移卡住、进度条不动。定位src/app/api/ice/route.tsCOTURN_ENABLED未设真时只返回stun:stun.l.google.com:19302docker-compose.yml 里 coturn 容器起来了但应用侧没开启。影响对称型 NAT 的用户必然失败你能给的售后只有换个网络试试。修复本地用pnpm dev:full全链路测试生产设COTURN_ENABLEDtruedocker-compose.production.yml 已带。TURN_HOST 默认值是 127.0.0.1现象开了 COTURN 依然连不通症状和没开一模一样。定位src/app/api/ice/route.ts 第 5 行process.env.TURN_HOST || 127.0.0.1。影响⚠️ 浏览器拿到的是turn:127.0.0.1:3478中继请求全打到用户自己机器上极易误诊成 NAT 问题。修复显式设置TURN_HOST。注意这个地址是给用户浏览器消费的要填公网可达的地址或域名不是容器内部主机名。构建与部署检查standalone 产物里 Service Worker 去哪了现象从next start换成构建产物部署后大文件不再边下边写盘经常下载失败。定位package.json 的 build 脚本是next build加两条cp把 public 与 .next/static 拷进 .next/standalone/Dockerfile 同样做了三步拷贝。影响standalone/server.js 默认不含 public/自己部署它时 public/sw.js 缺失StreamSaver 流式下载降级——文件先在浏览器里攒完再落盘大文件更容易崩。修复构建后确认部署目录里有 public/sw.js 与 .next/static走 Docker 构建或自己执行那两条 cp 命令。运行环境检查.env 怎么填现象up成功、服务看起来正常但所有配置都来自代码默认值。定位docker-compose.production.yml 的 filepizza 服务声明env_file: .env而仓库里没有提供模板。影响忘了建文件就继承TURN_HOST127.0.0.1和TURN_REALMfile.pizza——既是上一节的坑也是不属于你的 realm。修复启动前创建 .env至少填 TURN_HOST、TURN_REALM、STUN_SERVER、PEERJS_HOST键名见 README.md 的 Configuration 一节。上线前核对清单检查项位置动作渠道状态持久化src/channel.ts设置 REDIS_URL确认 redis 服务在跑删除链接接口src/app/api/destroy/route.ts加限流与日志或加 secret 校验TURN 开关src/app/api/ice/route.ts生产设 COTURN_ENABLEDtrueTURN 地址docker-compose.production.yml.env 里填用户侧可达的 TURN_HOSTstandalone 静态文件package.json构建后验证 sw.js 与 static 已拷贝环境变量模板docker-compose.production.yml先建 .env按 README 补全键名这套状态持久化、连接配置、构建产物、环境模板的体检顺序可以直接复用到任何 Next.js WebRTC 项目数据重启后还在不在、中继路径真的通不通、部署产物和开发环境一不一致、默认值是否都被审视过。当一次跨城传输顺利跑完你就知道这次体检值了。【免费下载链接】filepizza:pizza: Peer-to-peer file transfers in your browser项目地址: https://gitcode.com/GitHub_Trending/fi/filepizza创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考