Snapdrop 介绍
用过苹果的朋友都知道 AirDrop 在同一局域网(或无线网)下传输文件特别方便。但传输到其他设备,如 :Windows 电脑就不好使了,这时可以借助微信,QQ来传,但是同个微信号只能在一台 PC 登录,就很不方便。 Snapdrop 就是为了解决跨设备传文件这个痛点应运而生的。不需要任何配置,只要有网即可。
Snapdrop 官网:https://snapdrop.net/
自托管 Snapdrop
有些童鞋可能不满足 Snapdrop 所提供的服务,想自己部署一套。幸运的是,Snapdrop 是开源软件,官网已经做好了 Docker 镜像,部署起来也是很 easy.
使用 docker-compose 部署
在使用镜像前,需要先看下 docker-compose.yml 配置文件。如下:
version: "3"
services:
node:
image: "node:lts-alpine"
user: "node"
working_dir: /home/node/app
volumes:
- ./server/:/home/node/app
command: ash -c "npm i && node index.js"
nginx:
build:
context: ./docker/
dockerfile: nginx-with-openssl.Dockerfile
image: "nginx-with-openssl"
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 服务和宿主机绑定了2个端口,HTTP:8080,HTTPS:443。 对于宿主机已经使用端口8080或443的,需要调整下端口映射。
比如:
ports:
- "18080:80"
- "1443:443"
现在执行以下命令运行,
git clone https://github.com/RobinLinus/snapdrop.git
cd snapdrop
docker-compose up -d
docker-compose 会启动 2 个 docker容器。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3790715890a6 nginx-with-openssl "/mnt/openssl/create…" 36 minutes ago Up 32 minutes 0.0.0.0:18080->80/tcp, 0.0.0.0:1443->443/tcp snapdrop-master_nginx_1
7c4be5e9bbc1 node:lts-alpine "docker-entrypoint.s…" About an hour ago Up 32 minutes snapdrop-master_node_1
正常情况下访问:http://localhost:18080 即可看到了。(端口改为18080同理)
nginx 配置
通过上面操作,Snapdrop 已经可以正常启动了,但是如果想用域名绑定,除非服务器只做这个服务,否则就需要 Nginx 为域名做代理。
新建 snapdrop.conf
server {
listen 443 http2 ssl;
server_name snapdrop.mangobeta.com;
charset utf-8;
# SSL 配置省略
# 默认代理到 18080
location / {
proxy_pass http://localhost:18080;
}
# Websocket 需要协议升级
location /server {
proxy_pass http://localhost:18080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
常见问题
- 出现 Connection lost. Retry in 5 seconds… message 错误,需看下 docker 日志,排查问题。
- ./server/:/home/node/app 映射到宿主机的 server 文件夹需要其他用户写权限。
Demo:
https://snapdrop.mangobeta.com/