SnapDrop是一个基于WebRTC接口来实现提供局域网内跨平台传输文件和信息服务的开源项目,基于GNU 3.0协议在GitHub开放源代码。本文可能是最全面的SnapDrop使用及部署攻略。
1.使用SnapDrop
由于自建有一定的门槛,对于一般用户可以可直接使用官方提供的网站https://snapdrop.net/(或者博主自建的汉化版服务https://qwq.pw/),因为文件不经过服务器进行传输,所以对于安全性无需过多的担心。
使用SnapDrop非常简单,在需要传输文件的设备间同时打开https://snapdrop.net/网站,每台设备会被分配一个随机的名字。单击(电脑端)/轻点(移动端)需要传输文件的设备图标即可进行传输,也可以右键(电脑端)/长按(移动端)相应的设备图标来传送文字信息。
如果你采用的是Chrome浏览器,还可以在地址栏找到相应图标,将该网站添加为Chrome应用,就可以像原生应用一样快速访问,以备下次使用。
在iOS设备上,你也可以将网页添加到主屏幕,以便下次使用。
此外,也有开发者尝试使用Electron为SnapDrop开发本地版本(https://github.com/alextwothousand/snapdrop-desktop),即可在仅有局域网连接的情况下进行文件传输,但目前该项目还在重写中。
2.采用Docker部署自己的SnapDrop服务
官方文档推荐采用docker-compose来进行快速部署:
git clone https://github.com/RobinLinus/snapdrop.git
cd snapdrop
docker-compose up -d
默认的http端口为8080,https端口为443,访问http://localhost:8080即可打开你部署的SnapDrop服务了。利用docker-compose restart/stop及docker logs snapdrop_node_1命令即可快速重启、停止和查看日志。
通过修改docker-compose.yml中的ports部分,即可修改默认端口。
如果你需要PWA支持,可以参考官方文档的相关说明。简单来说,就是需要部署有效的https证书,如果你不会配置nginx,只要查阅配置https的相关教程修改默认的nginx配置即可。
3.手动部署SnapDrop
官方文档并没有提供不采用Docker的部署方式,但手动部署也同样十分方便。如果你的服务器还部署了其他项目,可以参考本部分来进行手动部署。
将SnapDrop项目下载到本地后,我们可以发现项目由server和client两部分组成,只要分别部署服务器端和客户端即可。
sever端采用的是nodejs,部署非常简单。
#下载项目到本地,并进入server目录
git clone [email protected]:RobinLinus/snapdrop.git
cd snapdrop/server
#运行index.js
npm install
node index.js
如果需要持久化运行,可以使用npm的forever模块
npm install forever -g
forever start index.js
还可以通过添加-o和-e参数,来设置访问日志和错误日志。
foerver的常用命令如下:
start Start SCRIPT as a daemon
stop Stop the daemon SCRIPT by Id|Uid|Pid|Index|Script
stopall Stop all running forever scripts
restart Restart the daemon SCRIPT
restartall Restart all running forever scripts
list List all running forever scripts
client端是静态的,使用nginx部署即可,但需要注意参考官方docker提供的default.conf修改nginx配置。
server {
listen 80;
#server_name your.domain;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
expires epoch;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#最关键的部分,配置后端服务器,注意修改proxy_pass
location /server {
proxy_connect_timeout 300;
proxy_pass http://node:3000;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-for $remote_addr;
}
location /ca.crt {
alias /etc/ssl/certs/snapdropCA.crt;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
配置好之后,访问你nginx设置的域名,即可打开SnapDrop了,如果没有出现Connection lost. Retry in 5 seconds…的提示,就说明配置成功,否则可能是nginx配置有误,需要检查配置。和docker部署的情况相同,只要正确设置了https,也可以同样启用PWA。
虽然SnapDrop相比AirDrop,无论是在功能还是便捷程度上,还有一定的差距。但是SnapDrop仍不失为跨平台传输文件的极佳选择,可以较为方便的自部署也保证了信息的安全性,值得一试。