PairDrop(https://pairdrop.net/)完整介绍
一、基础概述
PairDrop 是开源、浏览器驱动的跨平台点对点文件传输网页应用,版本 v1.11.2,是老牌工具 Snapdrop 的增强分支,被称为跨平台版 AirDrop。
- 官网:https://pairdrop.net/
- GitHub:https://github.com/schlagmichdoch/PairDrop(GPL‑3.0开源协议)
- 核心定位:不用注册账号、不用安装软件,打开浏览器即可在设备之间互传文件、文本、链接。
区别于Snapdrop:Snapdrop仅支持同一局域网;PairDrop新增配对码、公共房间,支持跨互联网传输设备连接。
二、技术原理 WebRTC 点对点传输
- 底层使用 WebRTC 实现端到端加密直连;服务器仅做连接信令,文件数据流不经过服务器存储。
- 同一Wi‑Fi局域网:设备自动互相发现,文件完全本地直传,不走外网服务器,速度快、保护隐私。
- 不同网络(外网远程):使用配对码 / 公共房间,借助TURN中继建立加密通道;文件依旧端到端加密,服务器无法读取内容。
- 仅需要现代浏览器(Chrome、Edge、Safari、Firefox),手机微信内置浏览器也可以打开使用。
三、核心功能特性
- 零安装、零注册
任意设备浏览器打开网页即可,无需下载App,无需手机号/账号;可添加为PWA网页应用,生成桌面/手机桌面图标,像普通软件一样点开。
- 两种连接模式
- ✅ 局域网自动发现:设备连同一个Wi‑Fi,打开网站,页面直接显示其他在线设备,一键选中发送。
- ✅ 跨网络配对:6位配对码、二维码、公共房间名字,不在同一WiFi也能配对传输,配对可以持久保存,关闭网页再打开仍然保留配对关系。
- 可传输内容
- 文件:图片、视频、压缩包、文档,没有人为限制文件大小;支持拖拽上传,支持同时发给多台设备。
- 纯文本、网址链接、备忘录片段,快速跨设备复制文字。
- 全平台兼容
Windows、macOS、Linux、ChromeOS、Android、iOS。
Android有可选原生客户端,深度集成系统分享菜单;iOS只能使用浏览器/PWA。
- 多语言、可自建部署
内置25+语言;完全开源,支持Docker自建私有实例,可以完全不依赖官方 pairdrop.net 服务,适合企业内网使用。
四、简单使用流程
- 两台设备浏览器打开
pairdrop.net - 同一WiFi:页面直接看到对方设备名称,点击设备图标,选择文件/粘贴文字发送。
- 不在同一WiFi:点「Pair devices」获取配对码或者创建公共房间,另一台输入相同配对码/房间名完成配对,再发送内容。
- 接收方网页弹窗确认,保存文件即可。
五、优点与局限
✨优点
- 无需账号、无需数据线、无需云盘;文件点对点传输,不上传到第三方服务器,隐私性好。
- 跨苹果、安卓、Windows,弥补AirDrop仅苹果设备可用的短板。
- 大文件也可以传输,局域网内速度取决于Wi‑Fi带宽。
- 支持自建私有服务,数据完全自己掌控。
⚠️局限
- 浏览器网页有内存限制,浏览器打开超大文件(几十GB级别)可能出现卡顿;超大文件更建议本地客户端工具。
- 跨外网传输时,如果网络环境复杂,部分NAT网络会连接失败,依赖TURN中继。
- iOS Safari浏览器PWA有系统权限限制,保存文件操作步骤会比安卓繁琐。
- 官方公共实例 pairdrop.net 是社区维护公共服务,重要敏感文件建议优先自建实例使用。
六、适用场景
- 手机 ↔电脑互传照片、视频、文档,不想插USB数据线。
- 临时传递链接、文字笔记。
- 会议室多人快速分发文件。
- 不想登录网盘、微信传大文件,追求隐私,不想文件经过第三方平台。
如果你需要,我可以帮你整理一份自建PairDrop的Docker部署简易步骤。
PairDrop Docker 自建部署简易步骤
项目仓库:https://github.com/schlagmichdoch/PairDrop
镜像:linuxserver/pairdrop(推荐,维护稳定)
协议:GPL-3.0
说明:部署后,访问http://你的IP:3000,即可像 pairdrop.net 一样使用;如需外网访问,可搭配反向代理(Nginx/Caddy)+ HTTPS。
前置条件
- 已安装 Docker + Docker Compose
- 检查:
docker -v、docker compose version
- 检查:
- 服务器端口
3000放行(防火墙/安全组) - 可选:域名,用于反向代理 HTTPS(WebRTC 外网连接推荐 HTTPS,纯 HTTP 在部分浏览器会受限)
方式一:docker-compose.yml(推荐)
mkdir -p ~/pairdrop && cd ~/pairdrop
新建文件夹,例如 pairdrop,进入目录
mkdir -p ~/pairdrop && cd ~/pairdrop
services:
pairdrop:
image: linuxserver/pairdrop:latest
container_name: pairdrop
restart: unless-stopped
ports:
- "3000:3000"
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config:/config
# 可选:开启局域网设备发现(需要主机网络模式,二选一)
# network_mode: host
创建 docker-compose.yml
services:
pairdrop:
image: linuxserver/pairdrop:latest
container_name: pairdrop
restart: unless-stopped
ports:
- "3000:3000"
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config:/config
# 可选:开启局域网设备发现(需要主机网络模式,二选一)
# network_mode: host
⚠️ 网络模式说明:
- 默认 bridge 模式:端口映射
3000:3000,简单方便;局域网设备自动发现功能失效,只能用配对码/房间连接。network_mode: host主机网络:支持局域网自动发现设备;不能写 ports 端口映射,容器直接占用宿主机3000端口。
docker compose up -d
启动容器
docker compose up -d
docker compose logs -f pairdrop
查看日志(排错用)
docker compose logs -f pairdrop
# 停止
docker compose down
# 更新镜像并重启
docker compose pull && docker compose up -d
停止/更新镜像
# 停止
docker compose down
# 更新镜像并重启
docker compose pull && docker compose up -d
方式二:单行 docker run(快速测试)
docker run -d \
--name=pairdrop \
-p 3000:3000 \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-v ~/pairdrop/config:/config \
--restart unless-stopped \
lscr.io/linuxserver/pairdrop:latest
访问测试
本地访问:http://服务器IP:3000
- 同局域网:bridge模式只能配对码连接;host模式可自动发现设备。
- 外网访问:建议配置反向代理 + HTTPS。
反向代理 Nginx 配置示例(HTTPS)
域名 pairdrop.example.com,已申请SSL证书
server {
listen 80;
server_name pairdrop.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name pairdrop.example.com;
ssl_certificate /etc/nginx/ssl/pairdrop.crt;
ssl_certificate_key /etc/nginx/ssl/pairdrop.key;
proxy_pass [http://127.0.0.1:3000](http://127.0.0.1:3000);
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
WebRTC 外网传输必须HTTPS,普通HTTP域名浏览器会限制WebRTC,无法建立配对连接。
关键注意事项
- 局域网自动发现:想要打开网页就自动看到同WiFi设备,必须用
network_mode: host,bridge模式不支持mDNS设备发现。 - 端口:host模式下宿主机3000端口不能被其他程序占用。
- 数据:PairDrop是点对点传输,文件不会存服务器,容器
/config只存配置,不保存传输文件。 - 安全:公网部署务必HTTPS;不要暴露裸HTTP公网。
- 移动端:手机浏览器打开你的域名,可添加PWA到桌面。
故障快速排查清单
- 打不开页面:服务器防火墙/云服务商安全组放行3000端口
- 同局域网看不到设备:没有使用
network_mode: host - 外网配对成功但发文件失败:没有HTTPS,或者服务器UDP端口被防火墙拦截(WebRTC需要UDP)
如果你需要,我可以给你一份 Caddy v2 的反向代理配置(自动申请SSL证书,比Nginx更省事)。
PairDrop + Caddy v2 一键部署脚本
说明:
- 整套方案:
docker-compose.yml启动 PairDrop;Caddy 使用官方 docker 镜像一起托管,不需要宿主机单独安装 Caddy。- 自动申请 Let’s Encrypt HTTPS 证书,自动续期。
- PairDrop 使用 bridge 模式,局域网mDNS自动发现失效,只能使用配对码/房间传输;适合公网访问。
- 替换脚本里
pairdrop.yourdomain.com为你自己的域名,域名已经解析到服务器公网IP。- 服务器安全组/防火墙放行:TCP 80、TCP 443(必须开放,用于ACME证书签发)。
一键脚本 deploy-pairdrop.sh
#!/bin/bash
set -e
# ========== 请修改这里 ==========
DOMAIN="pairdrop.yourdomain.com"
# 如需开启页面密码保护,设置 ENABLE_AUTH=true,访问时需要账号密码
ENABLE_AUTH=false
AUTH_USER="pair"
# ================================
WORK_DIR="$HOME/pairdrop-deploy"
mkdir -p ${WORK_DIR}
cd ${WORK_DIR}
# 生成 Caddyfile
cat > Caddyfile <<EOF
${DOMAIN} {
$(if [ "${ENABLE_AUTH}" = true ]; then
HASH=$(docker run --rm caddy:2 caddy hash-password -p "${AUTH_PASS}")
echo " basic_auth /* {"
echo " ${AUTH_USER} ${HASH}"
echo " }"
fi)
reverse_proxy pairdrop:3000 {
transport http {
keepalive 30s
}
header_up X-Real-IP {remote_host}
header_up Host {host}
}
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
}
log {
output file /var/log/caddy/pairdrop.log
level info
}
}
EOF
# 生成 docker-compose.yml
cat > docker-compose.yml <<EOF
services:
pairdrop:
image: lscr.io/linuxserver/pairdrop:latest
container_name: pairdrop
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./pairdrop-config:/config
# bridge网络,供caddy反向代理
networks:
- pd-net
caddy:
image: caddy:2
container_name: caddy-pairdrop
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy-data:/data
- ./caddy-config:/config
- ./caddy-logs:/var/log/caddy
networks:
- pd-net
depends_on:
- pairdrop
networks:
pd-net:
EOF
echo "====================================="
echo "文件生成完成,目录:${WORK_DIR}"
echo "域名:${DOMAIN}"
echo "====================================="
echo "操作步骤:"
echo "1. cd ${WORK_DIR}"
echo "2. docker compose up -d"
echo "3. 等待1~3分钟证书签发,访问 https://${DOMAIN}"
echo ""
echo "如需开启密码认证:"
echo " 执行:export AUTH_PASS='你的密码' && bash deploy-pairdrop.sh"
echo "====================================="
使用步骤
- 新建脚本文件
nano deploy-pairdrop.sh
粘贴全部内容,修改顶部 DOMAIN="pairdrop.yourdomain.com" 为你的域名。
- 赋予执行权限
chmod +x deploy-pairdrop.sh
- 执行部署
- 不需要密码保护版本
./deploy-pairdrop.sh
- 需要网页密码保护版本(运行前先设置密码变量)
export AUTH_PASS='你自定义的访问密码'
./deploy-pairdrop.sh
- 启动容器
cd ~/pairdrop-deploy
docker compose up -d
常用运维命令
# 查看运行状态
docker compose ps
# 查看日志 pairdrop
docker compose logs -f pairdrop
# 查看日志 caddy
docker compose logs -f caddy
# 重载Caddy配置(修改Caddyfile后执行)
docker compose exec caddy caddy reload
# 停止服务
docker compose down
# 更新镜像并重启
docker compose pull && docker compose up -d
目录结构说明
~/pairdrop-deploy/
├── Caddyfile # Caddy反向代理配置
├── docker-compose.yml # 编排文件
├── deploy-pairdrop.sh # 部署脚本
├── pairdrop-config/ # PairDrop配置持久化
├── caddy-data/ # Caddy证书存放目录
├── caddy-config/
└── caddy-logs/ # Caddy访问日志
⚠️ 重要提醒
- 证书签发:首次启动需要等待几十秒到几分钟,Caddy向Let’s Encrypt申请SSL证书;域名必须解析到服务器公网IP,80端口必须对外开放。
- WebRTC外网传输:网页走Caddy HTTPS代理;P2P数据流不走Caddy,浏览器直连。打洞失败会自动使用PairDrop内置TURN中继。服务器出站UDP尽量不要封禁。
- 局域网自动发现:本方案PairDrop跑在docker桥接网络,同局域网设备无法自动发现,只能使用配对码/房间号传输文件。
- CDN注意:不要套CDN,CDN会破坏WebRTC,并且ACME证书验证容易失败。
如果你想要保留局域网mDNS自动发现(host网络模式)版本,我可以单独再给一套脚本,但是公网反向代理会更麻烦。