火狐推出了项目Firefox Send,这里尝试通过docker镜像来本地部署临时文件共享服务。

一、通过官方源代码制作docker镜像

安装nodejs 以及其他编译环境

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

#centos
yum install screen
yum -y groupinstall "Development Tools"

获取源代码并生成项目

1
2
3
4
5
6
7
# 编译项目
git clone https://github.com/mozilla/send.git
cd send
npm install
npm run build
# 制作docker镜像
docker build -t firefox-send  .

编写docker-compose文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
version: "3"
services:
  web:
    image: firefox-send
    container_name: firefox-send
    links:
      - redis
    ports:
      - "127.0.0.1:1443:1443"
    environment:
      - REDIS_HOST=redis
      - NODE_ENV=production
    restart: unless-stopped
  redis:
    image: redis:alpine
    container_name: redis
    restart: unless-stopped

二、运行

1
2
3
docker-compose up -d 
# 访问http://127.0.0.1:1443, 一切正常就可以访问到页面了
# 如果想提供给其他机器访问,请将"127.0.0.1:1443:1443" 更改为"0.0.0.0:1443:1443"

三、绑定域名

如果有自己的域名,需要绑定服务的话,可以使用nginx进行反向代理

 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
# nginx配置文件
# 这里使用了强制跳转https,证书生成,或者自签名证书的方法请自行搜索。

server {
    listen  80;
    server_name localhost;
    rewrite ^/(.*)$ https://202.112.4.58/ permanent;
}
server {
        listen 443 ssl http2;
        server_name localhost;
        ssl on;
        ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
        ssl_certificate_key /etc/ssl/private/nginx-selfsigned.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://127.0.0.1:1443;
                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://127.0.0.1:1443;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }

}

注意事项

1
2
3
4
1. 进行反向代理的时候,还需要代理/api/ws这个路径,因为firefox-send文件上传使用的是websocket协议.
2. 完全可以不做成docker镜像,直接npm start就可以访问,这时候的访问端口为8080,ws协议的端口为8081,反向代理的时候注意修改。
可以用screen -S send 起一个screen窗口,这样npm start 就可以一直在窗口内跑,退出终端也不会断。
3. 之所以用docker是因为centos服务器上编译node会报各种各样的错,可以在自己机器上编译好docker镜像,传到docker hub上,这样服务器端就可以使用docker-compose配置直接启动镜像了。