局域网内传输工具snapdrop

局域网内传输工具snapdrop
  本文不会详细介绍太多部署上的过程,该注意的点会指出来。
  首先看下人家部署好的,有个感性认识:https://drop.esonwong.com/。如果在公司,可以跟公司同事分别打开这个网址,找到浏览器分配给对方的唯一标识名,就能传输文件了。

   老板当时发了这个链接让我部署:https://www.creeper.me/185,docker部署方式,而且叫我在公司内网部署(我确定我没听错,他后来还说内网肯定不行)。 可能他觉得用docker方式部署简单、方便,拉人家镜像下来就能跑。周三(9月7日)他临下班的时候才发来,我在内网运行index.js,说我没有部署npm环境

cd snapdrop/server
#运行index.js
npm install
node index.js

 

注意点一:

  部署snapdrop,需要依赖npm环境,不管是docker、还是直接在操作系统部署。装的时候不要随便找,不然node和npm版本对不上,后续运行index.js 也是会报错。

附上安装过程:

(1)官网地址下载:https://nodejs.org/zh-cn/download/releases/,我这里装的是v16.4.1,直接把这个 node-v16.4.1-linux-x64.tar.gz 下载下来就行,里面有npm

(2)服务器安装

cd /usr/local/src
rz 上传 node-v16.14.1-linux-x64.tar.gz

mkdir /usr/local/node
mv  /usr/local/src/node-v16.14.1-linux-x64   /usr/local/node/
ln -s /usr/local/node/node-v16.14.1-linux-x64/bin/node /usr/local/bin/node
ln -s /usr/local/node/node-v16.14.1-linux-x64/bin/npm /usr/local/bin/npm

 注意点二:

  我把这个在公司内网docker版本部署坑,都总结下:

(1)docker-compose.yml 里面的 working_dir 不需要自己创建,那是docker容器里面的。我当时傻傻的还建个node用户,还建了个 /home/node/app 目录 = =

跑起来有两个docker服务

其中端口18080、1443是我改了 docker-compose.yml 映射到容器外的端口

(2)公司内网虚拟机部署方式,不能用!

  如果在公司内网虚拟机上部署,无论是我后面说的直接在操作系统部署的方式,还是docker这种,局域网内两个设备打开都无法找到对方,进而传输文件

(3)线上服务器docker方式部署,配置nginx域名方式访问,能搜到非局域网内其他设备,但传输不了。

  当时部署的线上服务器已经跑有nginx,于是申请了域名转发到docker跑的端口18080。非同一个局域网,打开snapdrop部署的域名,其他设备都能看到。eg,我在家里的网络打开,另一个人在公司打开该域名,我们能互相看到对方,但不能传输,

 1 server {
 2     listen 443 ssl http2;
 3     server_name xx.xxx.net; 
 4     charset utf-8;
 5 
 6     ssl_certificate xxx.pem;
 7     ssl_certificate_key xxx.key;
 8 
 9     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
10     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
11     ssl_prefer_server_ciphers on;
12     ssl_session_timeout 5m;
13     add_header Strict-Transport-Security "max-age=31536000";
14 
15     location / {
16         proxy_pass http://localhost:18080;
17         proxy_http_version 1.1;
18         proxy_set_header Upgrade $http_upgrade;
19         proxy_set_header Connection "upgrade";
20         proxy_set_header X-Forwarded-for $remote_addr;
21         access_log /home/cudo/app/nginx/logs/snapdrop.log json;
22     }
23 
24     # Websocket 需要协议升级
25     location /server {
26         proxy_pass http://localhost:18080;
27         proxy_http_version 1.1;
28         proxy_set_header Upgrade $http_upgrade;
29         proxy_set_header Connection "upgrade";
30         proxy_set_header X-Forwarded-for $remote_addr;
31         
32     }
33 }
View Code

   比较奇怪的地方,“端口+ip”形式直接访问服务的形式,不同局域网的设备就无法看到。eg,服务器ip为:14.xx.xx.3,浏览器打开:14.xx.xx.3:18080,不会看到局域网以外的设备。

  我特意测过,是 X-Forwarded-for 控制的,去掉的话,连ip+端口访问都能看到局域网以外设备。

proxy_set_header X-Forwarded-for $remote_addr;

 

  老板觉得能这个非局域网外都能看到自己设备的bug,太影响体验。于是叫重装,找来另一个直接在操作系统部署的版本,在自由服务器上部署snapdrop【
 
 注意点三:
  在自由服务器上部署snapdrop,这个部署比docker版本确实简单,也没有那个非局域网外能搜到对方设备的问题。
  唯一麻烦是,装 pm2 比较迷幻。真的很迷幻,阴差阳错地装好(我自己也没搞明白怎么装好的,当时加班,老板一边跟人讨论事情,一边不定时问我弄好没有,可能比较幸运莫名其妙装好了,第二天在公司内网服务器装,没装成功只装到一个pm2命令,但用不了,于是直接把这个装好pm2的目录整个打包复制才能用,所以抱歉给不了大家方法怎么装好pm2了)。
  只知道 uuid 的版本要跟上,不然报错如下:

 装好应该会在:/usr/local/node/node-v16.14.1-linux-x64/lib/node_modules,看到 uuid 和 pm2。

pm2目录里面有这个东西,bin目录下才有 pm2命令

(1)pm2要做下软连接,不然普通用户可能会用不了

 ln -s /usr/local/node/node-v16.14.1-linux-x64/lib/node_modules/pm2/bin/pm2 /bin/pm2

(2)如果要改运行端口(默认是3000),需要修改 index.js 文件

  因为服务器上3000端口被grafana 用了,当时为了快点弄好,直接停掉grafana给 snapdrop 用。如下是改成 3002 端口

最后跑启动snapdrop命令:pm2 start index.js

 挺好看的~~

  顺便科普下,PM2 是一个带有负载均衡功能的Node 应用的进程管理器,详情可以看下:https://pm2.keymetrics.io/docs/usage/quick-start/

(3)nginx配置

a)主配置文件:

http {
。。。
    #websocket 需要加下这个
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
。。。

}

 

b)虚拟主机配置文件:

 1 server {
 2     listen 80;
 3     server_name xxx.xxx.net;
 4     return 301 https://xxx.xxx.net$request_uri;
 5 }
 6 
 7 
 8 server {
 9     listen 443 ssl http2;
10     server_name xxx.xxx.net; 
11     charset utf-8;
12 
13 
14     ssl_certificate xxx.pem;
15     ssl_certificate_key xx.key;
16 
17     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
18     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
19     ssl_prefer_server_ciphers on;
20     ssl_session_timeout 5m;
21     add_header Strict-Transport-Security "max-age=31536000";
22 
23     location / {
24         proxy_pass http://127.0.0.1:3002;
25         proxy_set_header Upgrade $http_upgrade;
26         proxy_set_header Connection $connection_upgrade;
27         proxy_set_header X-Forwarded-for $remote_addr;
28     }
29 
30 }
View Code

 

 

posted @ 2022-09-12 14:21  windysai  阅读(3296)  评论(0编辑  收藏  举报