制作令自己满意的 subconverter docker 镜像

本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。

2021.04.20 更新:增加了 docker-compose.yml 相关配置

为了在不同平台突破网络封锁,之前在 VPS上 用 Docker 部署了 subconverter 服务,但使用了一段时间之后,发现官方的提供的 Docker 镜像并不能完全满足我的需求,于是自己制作了一个 subconverter docker 镜像。

官方镜像存在的问题

  1. 对于 Google analytics 默认拦截且不可通过代理访问
  2. 对于 Microsoft 服务代理规则默认是直连
  3. 对于台湾地区的 emoji 显示不正确

动手制作镜像

在 Docker Hub 上找到了一个例子,照着写了一个。

FROM alpine:3.8
LABEL maintainer="Haukeng"

ENV VERSION v0.6.1

WORKDIR /base
RUN apk add wget tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    wget -P /base https://github.com/tindy2013/subconverter/releases/download/${VERSION}/subconverter_linux64.tar.gz && \
    tar xzf subconverter_linux64.tar.gz && \
    rm -rf subconverter_linux64.tar.gz && \
    sed -i '/TW/s/🇨🇳/🇹🇼/g' /base/subconverter/snippets/emoji.txt && \
    apk del wget tzdata

COPY groups.txt /base/subconverter/snippets

EXPOSE 25500

CMD ./subconverter/subconverter

它解决了这些问题

  • 全球拦截 规则上增加节点选择,解决Google Analytics的访问需求。
  • 微软服务 规则调整顺序使其默认使用代理。
  • 恢复正常的台湾 Emoji (🇹🇼)。
  • 修改镜像默认时区为 Asia/Shanghai。

其实就是这两行起到了上面的作用

  1. sed -i '/TW/s/🇨🇳/🇹🇼/g' /base/subconverter/snippets/emoji.txt
  2. COPY groups.txt /base/subconverter/snippets

1 是将 subconverter 中故意用中国国旗替换的 🇹🇼 换回来,用法如下。

# Replace only on lines matching the line pattern:

sed -i '/line_pattern/s/find/replace/g' filename

2 是用自定义的分组规则替换原来的分组规则,可以看这里查看我的规则。

在本地测试之后,我便想着把放 Docker Hub 上。但在配置 Docker Hub 自动构建的时候,发现自动构建开始时读不到 Dockerfile。一开始我以为是我配置有问题,对规则修修改改,最后发现这是 Docker Hub 自身的问题,发布更新之后只要等一会就好了。被自己傻哭😭️~

在配置规则的时候官方有详细的提示,看了之后再配置构建规则一般就不会出现什么问题~

Docker Compose 部署

发现经常有人通过搜索引擎找到这篇文章,所以便决定更新一下让大家可以更方便的部署自己的服务。

下载 docker-compose.yml

wget https://gist.githubusercontent.com/haukeng/fa9555c001c65da2ff09560caa29f459/raw/f7eb97bb2a53ffb9e2cb33a5ad2eeda65b308f20/docker-compose.yml

启动

docker-compose up -d

更新

docker image pull haukeng/subconverter:latest
docker-compose up -d

Nginx 反代例子(非必需)

upstream subconverter {
    server 127.0.0.1:25500;
}

server {
    listen 80;
    server_name  sub.example.com; # 将 sub.example.com 修改为你的域名。
    return 301 https://sub.example.com$request_uri; # 将 sub.example.com 修改为你的域名。
}

server {
    listen 443 ssl;
    gzip on;
    server_name  sub.example.com; # 将 sub.example.com 修改为你的域名。

    ssl_certificate /etc/ssl/certs/your_cert; # 将 your_cert 修改为你的 SSL cert
    ssl_certificate_key /etc/ssl/private/you_key; # 将 your_key 修改为你的 SSL cert key

    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers off;

    access_log /var/log/nginx/subconverter_access.log combined;
    error_log  /var/log/nginx/subconverter_error.log;

    location / {
        proxy_redirect off;
        proxy_connect_timeout 300;
        proxy_read_timeout 300;
        proxy_pass http://subconverter;

        proxy_set_header  Host                $http_host;
        proxy_set_header  X-Real-IP           $remote_addr;
        proxy_set_header  X-Forwarded-Ssl     on;
        proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto   $scheme;
        proxy_set_header  X-Frame-Options     SAMEORIGIN;

        client_max_body_size        100m;
        client_body_buffer_size     128k;

        proxy_buffer_size           4k;
        proxy_buffers               4 32k;
        proxy_busy_buffers_size     64k;
        proxy_temp_file_write_size  64k;
    }
}

最后分享一下在 Github 开源的地址Docker Hub

制作令自己满意的 subconverter docker 镜像
本文作者
Haukeng Ghou
最后更新
2021-04-20
许可协议
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!

评论

您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。