Files
PrivyDrop/README.zh-CN.md
T
david_bai 10f236dc8d docs: document in-app navigation persistence (no transfer interruption)
- README.md / README.zh-CN.md:
      - Add feature bullet for in-app navigation persistence (same-tab SPA)
      - Note boundaries: refresh/tab close/new tab not covered
  - Frontend architecture (zh/en):
      - Add “State & Connection Lifecycle (In-App Navigation)” section
      - Explain Zustand store singleton and webrtcService singleton across routes
      - Guidance: avoid leaveRoom()/store reset on route-change side effects
  - System architecture (zh/en):
      - Add “Runtime Session Model (Frontend)” summary
  - AI Playbook:
      - flows.zh-CN.md: add UX optimization item for in-app navigation persistence and debugging notes
      - code-map.zh-CN.md: mark webrtcService and fileTransferStore as singletons (cross-route)
2025-11-24 15:06:10 +08:00

150 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div align="center">
<img src="frontend/public/logo.png" alt="PrivyDrop Logo" width="180" />
</div>
# PrivyDrop - 基于 WebRTC 的隐私安全文件分享工具
[English](./README.md)
[![开源协议](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
PrivyDrop (原 SecureShare) 是一个基于 WebRTC 的开源点对点(P2P)文件和文本分享工具。它无需服务器中转,所有数据在浏览器之间直接传输,确保端到端加密,为你提供极致的隐私安全保障。
我们相信,每个人都应掌控自己的数据。PrivyDrop 的诞生就是为了实现这一愿景:一个简单、快速、私密的分享解决方案。
[**在线体验 »**](https://www.privydrop.app/) | [**GitHub 仓库 »**](https://github.com/david-bai00/PrivyDrop)
---
![PrivyDrop 界面截图](frontend/public/HowItWorks.gif)
## ✨ 主要特性
- 🔄 **无限制文件传输** - 支持任意大小文件传输,通过 Chrome 的流式保存到磁盘功能实现(需设置保存目录)
- 🔒 **端到端加密**: 基于 WebRTC 的 P2P 直连技术,所有文件和文本在浏览器间直接传输,不经过任何中央服务器。
- 📂 **文件与文件夹传输**: 支持多文件和整个文件夹的传输。
- ⏸️ **断点续传**: 自动从中断处恢复文件传输。只需设置保存目录即可启用此功能,确保即使在网络不稳定的情况下,您的大文件也能安全送达。如果中断,目前需要同时刷新发送端和接收端网页,重新开始传输即可。
-**实时高效**: 实时显示传输进度、自动计算传输速度。
- 📝 **富文本剪贴板**: 支持在线编辑和发送格式化文本,不仅仅是文件。
- 🔗 **便捷分享**: 通过链接或二维码轻松分享房间,建立连接。
- 📱 **多端支持**: 响应式设计,支持桌面和移动端浏览器。
- 🌐 **国际化**: 支持中文、英文等多个语言。
- 🧭 **站内导航不中断/状态保持**: 在同一标签页的站内跳转(Next.js App Router 页面切换)时,进行中的传输不会中断,已选择的待发送内容与接收页已展示的文本/文件清单也不会丢失。该能力依赖前端的单例状态(Zustand Store)与单例连接服务(webrtcService)。
## 🛠️ 技术栈
- **前端**: Next.js 14, React 18, TypeScript, Tailwind CSS, shadcn/ui
- **后端**: Node.js, Express.js, TypeScript
- **实时通信**: WebRTC, Socket.IO
- **数据存储**: Redis
- **部署**: PM2, Nginx, Docker
## 🚀 快速上手
### 🐳 Docker 一键部署 (推荐)
**零配置,一条命令完成部署!支持内网/公网/域名,自动签发/续期 HTTPS。**
```bash
# 内网(无域名/无公网IP
bash ./deploy.sh --mode lan-http
# 内网 + TURN(推荐用于复杂内网/NAT)
bash ./deploy.sh --mode lan-http --with-turn
# 内网 HTTPS(自签,开发/受管环境,显式开启 8443)
bash ./deploy.sh --mode lan-tls --enable-web-https --with-nginx
# 公网IP(无域名),含 TURN(推荐同源经 Nginx)
bash ./deploy.sh --mode public --with-turn --with-nginx
# 公网域名(HTTPS + Nginx + TURN + SNI 443 分流,自动申请/续期证书)
bash ./deploy.sh --mode full --domain your-domain.com --with-nginx --with-turn --le-email you@domain.com
```
完整说明见: docs/DEPLOYMENT_docker.zh-CN.md(模式一览、LAN TLS、自签限制、Lets Encrypt 自动签发/续期)
提示(lan-tls 自签 HTTPS
- 首次访问需导入 CA 证书:`docker/ssl/ca-cert.pem` 到浏览器(或系统信任),否则浏览器会提示“证书无效/不受信任”。
- 访问方式(默认):
- Nginx: `http://localhost`
- HTTPS: `https://localhost:8443``https://<你的局域网IP>:8443`
- 前端开发口(可选): `http://localhost:3002``http://<你的局域网IP>:3002`
- 启用 `--with-nginx` 时,前端与 API 同源(/api、/socket.io)更稳定;直连 `:3002/:3001` 仅用于调试,可能导致 CORS 或 404。
- 若启用了 `--enable-web-https` 并导入 CA,浏览器与 API 走同源 HTTPS(8443)可避免 CORS;我们已默认放开常见开发来源(`localhost``:3002` 等)。
**部署优势**:
- ✅ 部署时间: 60 分钟 → 5 分钟
- ✅ 技术门槛: Linux 运维 → 会用 Docker 即可
- ✅ 环境要求: 公网 IP → 内网即可使用
- ✅ 成功率: 70% → 95%+
详见: [Docker 部署指南](./docs/DEPLOYMENT_docker.zh-CN.md)
### 💻 本地开发环境
在开始之前,请确保你的开发环境已安装 [Node.js](https://nodejs.org/) (v18+), [npm](https://www.npmjs.com/) 以及一个正在运行的 [Redis](https://redis.io/) 实例。
1. **克隆项目 & 安装 redis**
```bash
git clone https://github.com/david-bai00/PrivyDrop.git
cd PrivyDrop
sudo apt-get install -y redis-server
```
2. **配置并启动后端服务**
```bash
cd backend
npm install
# 复制开发环境变量文件,然后根据需要修改 .env.development
cp .env_development_example .env.development
npm run dev # 默认启动于 http://localhost:3001
```
3. **配置并启动前端应用** (在新的终端窗口中)
```bash
cd frontend
pnpm install
# 复制开发环境变量文件,然后根据需要修改 .env.development,删除可选项
cp .env_development_example .env.development
pnpm dev # 默认启动于 http://localhost:3002
```
4. **开始使用**
在浏览器中打开 `http://localhost:3002` 即可访问应用。
## 🗺️ 路线图
我们制定了一份公开的路线图,其中概述了项目的未来愿景和当前的工作重点。你可以通过它了解我们正在进行的工作,或是寻找可以贡献力量的地方。
➡️ **[查看项目路线图](./ROADMAP.zh-CN.md)**
## 📚 文档
我们提供了详尽的文档来帮助你深入了解项目的设计和部署细节:
- [**项目整体架构**](./docs/ARCHITECTURE.zh-CN.md): 了解 PrivyDrop 系统各个组件如何协同工作。
- [**前端架构详解**](./docs/FRONTEND_ARCHITECTURE.zh-CN.md): 深入探索前端的现代化分层架构、基于 Zustand 的状态管理,以及解耦的服务化 WebRTC 实现。
- [**后端架构详解**](./docs/BACKEND_ARCHITECTURE.zh-CN.md): 深入探索后端的代码结构、信令流程和 Redis 设计。
- [**部署指南**](./docs/DEPLOYMENT.zh-CN.md): 学习如何在生产环境部署完整的 PrivyDrop 应用。
- [AI Playbook 索引](./docs/ai-playbook/index.zh-CN.md) · [协作规则](./docs/ai-playbook/collab-rules.zh-CN.md)
## 🤝 参与贡献
我们热烈欢迎任何形式的贡献!无论是报告 Bug、提出功能建议、提交代码还是加星,都对 PrivyDrop 的成长帮助巨大。请阅读我们的 [**贡献指南**](./.github/CONTRIBUTING.zh-CN.md) 来开始你的贡献之旅。
我们制定了所有贡献者都应遵守的 [**行为准则**](./.github/CODE_OF_CONDUCT.zh-CN.md),请在参与前仔细阅读。
## 📄 开源协议
本项目采用 MIT 协议,详情请见 [LICENSE](./LICENSE) 文件。