方案概述

  1. 安装最新的 Docker(环境)
  2. 启动 subconverter 容器(转换后端)
  3. 启动 sub-web 容器(Web 前端)
  4. Nginx 反代两个容器

操作步骤

一、安装最新的 Docker(环境)

参考:Ubuntu 20.04 从官方源安装最新的 Docker

二、启动 subconverter 容器

项目地址:tindy2013/subconverter
Docker 镜像:tindy2013/subconverter

1
2
3
4
5
docker run -d \
--name subconverter \
--restart=unless-stopped \
-p 25500:25500 \
tindy2013/subconverter:latest

三、启动 sub-web 容器

项目地址:CareyWang/sub-web
Docker 镜像:careywong/subweb

1
2
3
4
5
docker run -d \
--name subweb \
--restart=unless-stopped \
-p 10080:80 \
careywong/subweb:latest

四、Nginx 反代两个容器

申请和安装下证书:

1
2
3
4
5
6
7
8
9
# 后端
acme.sh --issue -d subconverter.ceshiku.cn --webroot /var/acme/webroot/ -k ec-256
mkdir -vp /etc/nginx/ssl/subconverter.ceshiku.cn/
acme.sh --install-cert -d subconverter.ceshiku.cn --fullchain-file /etc/nginx/ssl/subconverter.ceshiku.cn/certificate.crt --key-file /etc/nginx/ssl/subconverter.ceshiku.cn/private.key --reloadcmd "service nginx force-reload"

# 前端
acme.sh --issue -d subweb.ceshiku.cn --webroot /var/acme/webroot/ -k ec-256
mkdir -vp /etc/nginx/ssl/subweb.ceshiku.cn/
acme.sh --install-cert -d subweb.ceshiku.cn --fullchain-file /etc/nginx/ssl/subweb.ceshiku.cn/certificate.crt --key-file /etc/nginx/ssl/subweb.ceshiku.cn/private.key --reloadcmd "service nginx force-reload"

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 后端
server {
listen 80;
server_name subconverter.ceshiku.cn;

# 强制跳转 HTTPS
location / {
return 301 https://$server_name$request_uri;
}

# 设置证书认证用的路径
location /.well-known/acme-challenge/ {
# acme.sh --webroot 模式,认证文件生成后放置的路径
root /var/acme/webroot/;
}
}

server {
listen 443 ssl;
server_name subconverter.ceshiku.cn;

# SSL 配置
ssl_certificate /etc/nginx/ssl/subconverter.ceshiku.cn/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/subconverter.ceshiku.cn/private.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

location / {
proxy_pass http://127.0.0.1:25500;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

# 前端
server {
listen 80;
server_name subweb.ceshiku.cn;

# 强制跳转 HTTPS
location / {
return 301 https://$server_name$request_uri;
}

# 设置证书认证用的路径
location /.well-known/acme-challenge/ {
# acme.sh --webroot 模式,认证文件生成后放置的路径
root /var/acme/webroot/;
}
}

server {
listen 443 ssl;
server_name subweb.ceshiku.cn;

# SSL 配置
ssl_certificate /etc/nginx/ssl/subweb.ceshiku.cn/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/subweb.ceshiku.cn/private.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

location / {
proxy_pass http://127.0.0.1:10080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

之后重启 Nginx:

1
2
nginx -s reload
service nginx restart

前端界面

前端界面