Snapdrop是一个十分简单的跨平台互传软件,只需要在同一网络中通过浏览器就可以即时共享图像、视频、文件 、文本等信息。无需设置,无需注册。

Docker环境自建

官方提供docker环境自建方案:Local Development

Nodejs+Nginx环境自建

  1. 克隆仓库

    git clone https://github.com/RobinLinus/snapdrop.git
    
  2. 安装Nodejs

    apt install nodejs npm
    node -v #查看版本
    npm -v #查看版本
    
  3. 安装forever

    npm install forever -g
    
  4. 启动后台服务

    cd snapdrop/server/
    npm install
    forever start index.js
    

    默认情况下,服务器侦听端口 3000,修改端口:server/index.js最后一行

  5. 安装Nginx

    apt install nginx
    
  6. Nginx支持SSL

    见:使用免费SSL/TLS证书

  7. 配置前台服务

    location /snapdrop {
    	alias   /home/snapdrop/client/; #静态页面在snapdrop/client
    	index  index.html index.htm;
    }
       
    location /snapdrop/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;
    }
    
  8. PWA 相关功能

    PWA 要求应用程序的协议必须是安全的(即使用 HTTPS 协议)

    根据实际情况修改清单文件 (Manifest):snapdrop/client/manifest.json

    {
        "name": "Snapdrop",
        "short_name": "Snapdrop",
        "icons": [{
            "src": "images/android-chrome-192x192.png",
            "sizes": "192x192",
            "type": "image/png"
        },{
            "src": "images/android-chrome-512x512.png",
            "sizes": "512x512",
            "type": "image/png"
        },{
            "src": "images/android-chrome-192x192-maskable.png",
            "sizes": "192x192",
            "type": "image/png",
            "purpose": "maskable"
        },{
            "src": "images/android-chrome-512x512-maskable.png",
            "sizes": "512x512",
            "type": "image/png",
            "purpose": "maskable"
        },{
            "src": "images/favicon-96x96.png",
            "sizes": "96x96",
            "type": "image/png"
        }],
        "background_color": "#efefef",
        "start_url": "/snapdrop/index.html",
        "display": "minimal-ui",
        "theme_color": "#3367d6",
        "share_target": {
            "method":"GET",
            "action": "/?share_target",
            "params": {
                "title": "title",
                "text": "text",
                "url": "url"
            }
        }
    }
    
    • name: 网站应用的全名。
    • short_name: 显示在主屏上的短名字。
    • description: 一两句话解释你的应用的用途。
    • icons: 一串图标信息:源 URL,大小和类型。多包含几个图标,这样就能选中一个最适合用户设备的。
    • start_url: 启动应用时打开的主页。
    • display: 应用的显示方式;可以是 fullscreenstandaloneminimal-ui 或者 browser
    • theme_color: UI 主颜色,由操作系统使用。
    • background_color: 背景色,用于安装和显示启动画面时。

    一份网页清单最少需要 name 和一个图标 (带有 src, sizetype)。最好也要提供 descriptionshort_name、和 start_url。除了上述字段,还有一些其它的字段供您使用,请查看网页应用清单参考获取详细信息。

  9. 其他

    可以通过此仓库获取中文版:Spandrop,已经修改相关代码解决部署在非根路径下的一些问题。