Snapdrop Docker 快速部署

Snapdrop 介绍

过苹果的朋友都知道 AirDrop 在同一局域网(或无线网)下传输文件特别方便。但传输到其他设备,如 :Windows 电脑就不好使了,这时可以借助微信,QQ来传,但是同个微信号只能在一台 PC 登录,就很不方便。 Snapdrop 就是为了解决跨设备传文件这个痛点应运而生的。不需要任何配置,只要有网即可。

Snapdrop 官网:https://snapdrop.net/

自托管 Snapdrop

有些童鞋可能不满足 Snapdrop 所提供的服务,想自己部署一套。幸运的是,Snapdrop 是开源软件,官网已经做好了 Docker 镜像,部署起来也是很 easy.

使用 docker-compose 部署

在使用镜像前,需要先看下 docker-compose.yml 配置文件。如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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的,需要调整下端口映射。

比如:

1
2
3
    ports:
      - "18080:80"
      - "1443:443"

现在执行以下命令运行,

1
2
3
git clone https://github.com/RobinLinus/snapdrop.git
cd snapdrop
docker-compose up -d

docker-compose 会启动 2 个 docker容器。

1
2
3
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
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";
    }

}

常见问题

  1. 出现 Connection lost. Retry in 5 seconds… message 错误,需看下 docker 日志,排查问题。
  2. ./server/:/home/node/app 映射到宿主机的 server 文件夹需要其他用户写权限。

Demo:

https://snapdrop.mangobeta.com/

参考文档

updatedupdated2020-10-302020-10-30
Load Comments?