Contents
最近火狐的一个项目Firefox Send在TG又火了一把,自从去年开始内测之后,最近Mozilla正式上线了该服务。该服务旨在提供简单、私密的文件分享服务,不登录火狐账户可以上传分享不超过1G的文件,登录火狐之后可以上传分享不超过2.5G的文件。且火狐承诺该服务是端到端的,分享链接可加密,到期即焚,十分安全。
要强调的是Firefox Send下载被分享文件是先在浏览器下载,再拷贝至桌面,通过抓包也能验证其安全性和不可获得直链的事实。
以上是官方提供的网址,刚好我看见其中有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 -v
和npm -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.js
devserver里面看到端口是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!],最后不要忘记开放相关端口~
在nginx.conf里面加入了上面的代码,重启了nginx,没报错还是没有上传功能
开放了8081端口
几天没见开发者更新了不少版本,我不是很清楚新的版本怎么样
之前安装的时候用的是3.0.3版本,你可以参考下
猜测问题可能还是出在nginx配置上面