Firefox Send-临时文件分享服务部署 - Newlearnerの小站

Firefox Send-临时文件分享服务部署 - Newlearnerの小站

Firefox Send-临时文件分享服务部署

2019-03-14 3条评论 3,238次阅读 本文共1472个字,预计阅读时间4分钟。
Newlearner365 最后修改:2019-08-5 10:18
Spread the love

    最近火狐的一个项目Firefox Send在TG又火了一把,自从去年开始内测之后,最近Mozilla正式上线了该服务。该服务旨在提供简单、私密的文件分享服务,不登录火狐账户可以上传分享不超过1G的文件,登录火狐之后可以上传分享不超过2.5G的文件。且火狐承诺该服务是端到端的,分享链接可加密,到期即焚,十分安全。

    要强调的是Firefox Send下载被分享文件是先在浏览器下载,再拷贝至桌面,通过抓包也能验证其安全性和不可获得直链的事实。

    官网地址:https://send.firefox.com

    以上是官方提供的网址,刚好我看见其中有github开源的项目,于是开始了自建Firefox Send服务的探索。

    交流群:Newlearnerの水群

    准备工作

    What I need

    1、一台有公网ip的服务器

    2、Node.js 10.0+

    3、Redis server(可选)

    4、nginx(可选,如果你想要绑定域名)

    5、一些依赖

    部署

    安装Nodejs

    1
    2
    3
    4
    5
    6
    7
    #centos
    curl --silent --location https://rpm.nodesource.com/setup_10.x | bash -
    yum -y install nodejs
     
    #debian
    curl -sL https://deb.nodesource.com/setup_10.x | bash -
    apt install nodejs

    可用node -vnpm -v查看安装的版本号

    安装Redis

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #centos
    yum -y install redis
    systemctl start redis
    systemctl enable redis
     
    #debian
    apt install redis-server
    systemctl start redis-server
    systemctl enable redis-server

    安装Nginx

    既然有兴趣做这个网页服务的人我想大都了解lnmp。以下过程也基于lnmp一键的环境,如果对其他并无要求,单独安装nginx即可。

    安装其他

    1
    2
    3
    4
    5
    6
    #centos
    yum install screen
    yum -y groupinstall "Development Tools"
     
    #debian
    apt install make gcc g++ screen

    Git项目并安装运行

    1
    2
    3
    4
    5
    6
    7
    git clone https://github.com/mozilla/send.git
    cd send
    npm install
    screen -S send
    npm start
     
    最后Ctrl+A+D退出screen窗口,该项目会在后台一直运行

    此时通过浏览器访问https://yourserverip:8080即可

    绑定域名

    绑定域名我觉得是常规操作,毕竟ip难记且不容易被大家接受,所以我们需要用到nginx。

    修改Webpack.config.js

    因为新版的webpack-dev-server出于安全考虑,默认检查hostname,如果hostname不是配置内的,将中断访问。所以我们要在Git项目并安装运行这一步之前修改webpack.config.js文件的配置参数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #进入send文件夹,ls显示全部内容,即可发现Webpack.config.js
    vi Webpack.config.js
     
    #修改为以下内容(节选部分)
    #在其中加入一行 disableHostCheck: true;
    devServer: {
        before:
          process.env.NODE_ENV === 'development' && require('./server/bin/dev'),
        compress: true,
        hot: false,
        disableHostCheck: true,
        host: '0.0.0.0',
        proxy: {
          '/api/ws': {
            target: 'ws://localhost:8081',
            ws: true,
            secure: false
          }
        }
      }

    书写nginx配置文件

    在修改完上一步配置并成功运行服务之后,我们在相应位置增加相应的nginx配置。以lnmp一键配置https为例,在usr/local/nginx/conf/vhost当中增加一个域名.conf。内容如下:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    server
        {
            listen 80;
            server_name domain ;
            return 301 https://domain$request_uri;    
            access_log off;
        }
     
    server
        {
            listen 443 ssl http2;
            server_name domain ;
            ssl on;
            ssl_certificate /usr/local/nginx/conf/ssl/domain/fullchain.cer;
            ssl_certificate_key /usr/local/nginx/conf/ssl/domain/cloud.newlearner.tk.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
            ssl_session_cache builtin:1000 shared:SSL:10m;
     
       location /api/ws {
             proxy_redirect off;
             proxy_pass http://0.0.0.0:8081;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
             proxy_set_header Host $http_host;
           }
     
       location / {
       proxy_pass       http://0.0.0.0:8080;
         proxy_set_header Host      $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
            access_log off;
        }

    直接通过443端口访问服务,如果你只想用http,简单修改即可。

    其中的坑

    因为我自己也是第一次用nodejs,踩坑无数,和大家分享下。

    其一就是webpack.config.js,如果不修改参数关闭自动检查,绑定域名之后无法访问。我一度认为是我的nginx配置文件写错了。

    其二是文件上传,Firefox Send用websocket传输,并且可以从webpack.config.jsdevserver里面看到端口是8081。我们用nginx之后,如果不配置,会报404错误。也就是网页打得开,文件无法上传。我从伟大的项目Project V获得灵感,在nginx里面加入:

    1
    2
    3
    4
    5
    6
    7
    8
    location /api/ws {
           proxy_redirect off;
           proxy_pass http://0.0.0.0:8081;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_set_header Host $http_host;
       }

    (o゜▽゜)o☆[BINGO!],最后不要忘记开放相关端口~


    参考文章:Stackoverflow invaild-host-header

      Send-github



    Tags: published
    November 27, 2019 at 08:46PM
    Open in Evernote

    评论

    此博客中的热门博文

    Oldghost's Blog » 群晖(Synology)反向代理服务器教程

    使用静态Aria2二进制文件快速安装Aria2,及使用方法 - Rat's Blog

    使用Holer远程登录家里或公司内网的电脑 – Rat’s Blog