Qingwa
(青小蛙)
March 28, 2022, 9:14am
1
Snapdrop 是一个很方便的跨平台文件传输工具,直接打开浏览器就能用:
于是想着自己建一个,基于 Docker 挺简单的,先克隆代码:
git clone https://github.com/RobinLinus/snapdrop.git
然后使用 docker-compose.yml 文件:
version: "3"
services:
node:
image: "node:lts-alpine"
working_dir: /home/node/app
restart: unless-stopped
volumes:
- ./server/:/home/node/app
command: ash -c "npm i && node index.js"
nginx:
container_name: snapdrop
image: "nginx:stable"
restart: unless-stopped
volumes:
- ./client:/usr/share/nginx/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./docker/certs:/etc/ssl/certs
- ./docker/openssl:/mnt/openssl
ports:
- "8080:80"
- "443:443"
env_file: ./docker/fqdn.env
entrypoint: /mnt/openssl/create.sh
command: ["nginx", "-g", "daemon off;"]
然后 docker-compose up -d
就能 IP:8080 访问了。
https://s.appinn.com/
4 Likes
sunbeam
(sunbeam)
March 29, 2022, 1:45am
3
群晖的话,直接搜就有,开箱即用 seji/snapdrop-docker
1 Like
Java
(Java)
March 29, 2022, 6:07am
4
因为sd使用相同IP来分组识别的,如果托管在内网自己用,要修改:
方法1)nginx的“location /server”中“proxy_set_header X-Forwarded-for $remote_addr;”改为“proxy_set_header X-Forwarded-for $host;”
方法2)对“server/index.js”执行以下命令,替换内容
sed -i ‘s/peer.ip/0/g’ index.js
sed -i ‘s/sender.ip/0/g’ index.js
公网用代理的话,想和通网络其他不用代理的用户互通的话:
1、代理分流把snapdrop排除不走代理
或者2、代理支持“ X-Forwarded-for”传递客户端IP
Java
(Java)
March 29, 2022, 6:07am
5
如果已有nginx,可以不要docker里的,合并部署到自己的nginx:
#docker-compose .yml参考
version: "3"
services:
node:
container_name: snapdrop
image: "node:lts-alpine"
working_dir: /home/node/app
restart: always
volumes:
- ./server/:/home/node/app
ports:
- "127.0.0.1:3000:3000"
command: ash -c "npm i && node index.js"
nginx .conf参考
server {
listen 0.0.0.0:443 ssl http2;
ssl_certificate /xxx/xxx.cer;
ssl_certificate_key /xxx/xxx.key;
server_name xxx;
access_log log/xxx.log main;
error_log log/xxx.error.log;
expires epoch;
location / {
root /xxx/client;
index index.html index.htm;
}
location /server {
proxy_connect_timeout 300;
proxy_pass http://127.0.0.1:3000;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-for $remote_addr;
}
location /ca.crt {
alias /xxx/docker/certs/snapdropCA.crt;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /xxx/client;
}
}
1 Like
Java
(Java)
March 29, 2022, 6:11am
6
最后再补充一个,浏览器必须双方支持WebRTC,否则点击发送消息和文件是没有响应的,也没有错误提示,控制台提示如下所示。测试chrome和edge都可以,手机上有些不行,特别是系统自带的,装个手机版的edge即可
network.js:404
Uncaught TypeError: this.peers[message.to].sendText is not a function
at PeersManager._onSendText (network.js:404:32)
at network.js:370:42
at Function.fire (network.js:509:16)
at SendTextDialog._send (ui.js:344:16)
at HTMLFormElement.<anonymous> (ui.js:319:53)
network.js:400
Uncaught TypeError: this.peers[message.to].sendFiles is not a function
at PeersManager._onFilesSelected (network.js:400:32)
at network.js:369:47
at Function.fire (network.js:509:16)
at PeerUI._onFilesSelected (ui.js:146:16)
at HTMLInputElement.<anonymous> (ui.js:111:72)
1 Like
toraPHAK
(toraPHAK)
March 29, 2022, 1:41pm
8
Snapdrop 无论哪个托管站点的,有个情况:PC 端开了代理软件的,比如 Clash for Windows,就无法与手机相互发现。这个要咋办,是分流规则的原因吗?
toraPHAK
(toraPHAK)
March 29, 2022, 1:43pm
10
bbk
April 1, 2022, 7:28am
13
我使用docker 搭建,初次搭建完成,他会一直显示 Connect 失败。
参考 issue 后,解决。
我先
docker-compose up
会报错 ,和上那个issue差不多的报错,记不太清了,差不多是permissions issue
仔细看docker配置的话可以发现它把Linux目录内的文件夹映射到docker里面,而docker没有修改权限。
我还发现docker 创建了文件夹,xxx/snapdrop/server/node_modules 他的用户和组是 1000/1000。 于是 我用 chown -R 1000:1000 xxx/snapdrop/server/ 修改权限。问题解决。
docker-compose up -d
打开网站就不会连接不上了。
前面的nginx和docker配置很有帮助,这个软件也挺方便的。
S837489
(李狗嗨)
September 3, 2022, 6:49am
19
靠,奇了怪了,iOS Beta通道Edge上线了Drop功能,但Win Dev通道Edge Drop按钮却消失了。但用手机端Drop给PC端发消息,PC端还能收到,还能激活Drop功能,但关掉后依然没有功能入口。
Frank9
(Frank)
November 29, 2022, 8:08am
21
还有个问题,如果手机端浏览器经过了clash,也无法与电脑相互发现,关了就好了。不知道手机端clash有没有什么排除的方法?