家庭数据中心系列 Policr Mini实战:构建安全高效的Telegram群验证系统

前言

因为人少,TG群我一直都没有做群验证,不过这周心血来潮,忽然觉得群没有验证比较low,所以决定着手打造一个加群验证机器人:一来,可以预防一下自动加群打广告的机器人;二来,让加群的朋友会觉得我比较专业~。

大概研究了一下,发现有2种选择:

1、选择现成的机器人方案

这种方案最出名的是”Group Help“,群地址为:GroupHelp群地址。这种方式最简单,机器人是现成的,只需要按照官方群里的说明将其机器人添加到自己的TG群里并赋予管理员权限即可,懒人必备。

这种方案的优点是不折腾,缺点是需要将其他人的机器人添加到自己群做管理员,总觉得别扭,没安全感。

2、自己手动搭建的机器人方案

这种方案最出名的就是”Policr Mini(beta)”,群地址为:Policr Mini群地址。这种方式需要有自己的主机(并且网络能够访问TG的API),且需要自己安装部署然后和TG进行对接,所以对技术有一定的要求。

这种方案的优点是安全,毕竟是自建的机器人,缺点就是需要折腾。

这两种方案各有优缺点,大家按照自己的实际需求进行选择即可,我肯定是选择Policr Mini的自建方案了。

注:Policr Mini的github项目地址为:https://github.com/Hentioe/policr-mini,由于本文以实用为主,有些不是必须的功能(比如图片方式验证)或者小众场合才需要的功能(比如本地API)我都没去折腾(主打一个能用就行),所以想要这些功能的朋友,可以按照官方网站的教程自行摸索。

Policr Mini机器人部署

前置准备工作:创建用于群验证的机器人

一般而言,不管是TG群(或者是TG频道或者web app)是因为哪种需求需要添加机器人,都有一个相同的前置操作:先创建对应的机器人,这步操作是通过在TG里单独和”BotFather”对话完成的。

1、使用@BotFather进入和BotFather的对话模式
image.png

2、使用/newbot命令创建新的机器人

image.png

将机器人token保存好,后面要使用。

3、在新建的机器人的”info”部分添加以下字段:

Powered by Policr Mini

如下图:

image.png

这是和官方的一个小约定,免费使用了别人的东西,我觉得在力所能及的范围内应该尽量尊重对方的建议:
image.png

4、使用/start命令可以看到支持的所有命令及作用(可选)
image.png

部署过程

稳定版和开发版的选择

该项目自行部署的教程分为”稳定版”和”开发版”:

image.png

大家根据自己需要自行选择,我一般偏向稳定不折腾,所以选择了”稳定版”。

本地部署(linux环境)

初始化工作环境

如果是Linux终端环境,请先确保已经成功安装了”Docker”和”Docker Compose”,如果没有安装请自行网上搜索使用系统对应的安装教程。

初始化工作目录及文件

注:Policr mini的本地部署需要postgres数据库的支撑,按照我一贯的做法应该是直接利旧本地现有的postgres数据库,然后用docker run的方式单独部署Policr mini。不过考虑到大部分的朋友还是更习惯docker-compose的部署方式,且Policr mini涉及的环境参数也教多,用docker run的方式的确也折腾,所以本篇文章我还是从善如流的用docker-compose的方式来安装:
1、创建工作目录(路径请根据实际环境修改)

mkdir -p /docker/policr-mini

2、在工作目录下创建docker-compose.yml和.env文件

cd /docker/policr-mini
touch docker-compose.yml
touch .env

3、使用文本编辑器将以下对应内容分别保存到docker-compose.yml和.env文件
docker-compose.yml文件内容:

version: "3"

services:
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: {POSTGRES_PASSWORD}
      POSTGRES_DB: policr_mini_prod
    volumes:
      - ./data:/var/lib/postgresql/data
    restart: always

  server:
    image: gramoss/policr-mini:latest
    ports:
      -{POLICR_MINI_SERVER_PORT}:{POLICR_MINI_SERVER_PORT}
      #-{POLICR_MINI_BOT_WEBHOOK_SERVER_PORT}:{POLICR_MINI_BOT_WEBHOOK_SERVER_PORT}
    environment:
      POLICR_MINI_DATABASE_URL: "ecto://postgres:{POSTGRES_PASSWORD}@db/policr_mini_prod"
      POLICR_MINI_DATABASE_POOL_SIZE: {POLICR_MINI_DATABASE_POOL_SIZE}
      POLICR_MINI_SERVER_ROOT_URL:{POLICR_MINI_SERVER_ROOT_URL}
      POLICR_MINI_SERVER_SECRET_KEY_BASE: {POLICR_MINI_SERVER_SECRET_KEY_BASE}
      POLICR_MINI_SERVER_PORT:{POLICR_MINI_SERVER_PORT}
      POLICR_MINI_BOT_TOKEN: {POLICR_MINI_BOT_TOKEN}
      POLICR_MINI_BOT_NAME:{POLICR_MINI_BOT_NAME}
      POLICR_MINI_BOT_OWNER_ID: {POLICR_MINI_BOT_OWNER_ID}
      #POLICR_MINI_BOT_API_BASE_URL:{POLICR_MINI_BOT_API_BASE_URL}
      #POLICR_MINI_BOT_WORK_MODE: {POLICR_MINI_BOT_WORK_MODE}
      #POLICR_MINI_BOT_WEBHOOK_URL:{POLICR_MINI_BOT_WEBHOOK_URL}
      #POLICR_MINI_BOT_WEBHOOK_SERVER_PORT: {POLICR_MINI_BOT_WEBHOOK_SERVER_PORT}
      POLICR_MINI_BOT_GRID_CAPTCHA_INDI_WIDTH:{POLICR_MINI_BOT_GRID_CAPTCHA_INDI_WIDTH}
      POLICR_MINI_BOT_GRID_CAPTCHA_INDI_HEIGHT: {POLICR_MINI_BOT_GRID_CAPTCHA_INDI_HEIGHT}
      POLICR_MINI_BOT_GRID_CAPTCHA_WATERMARK_FONT_FAMILY:{POLICR_MINI_BOT_GRID_CAPTCHA_WATERMARK_FONT_FAMILY}
      POLICR_MINI_BOT_ASSETS_PATH: /_assets
      POLICR_MINI_BOT_AUTO_GEN_COMMANDS: {POLICR_MINI_BOT_AUTO_GEN_COMMANDS}
      POLICR_MINI_BOT_MOSAIC_METHOD:{POLICR_MINI_BOT_MOSAIC_METHOD}
      POLICR_MINI_UNBAN_METHOD: {POLICR_MINI_UNBAN_METHOD}
      POLICR_MINI_OPTS:{POLICR_MINI_OPTS}
    volumes:
      - ./_assets:/_assets
    restart: always
    depends_on:
      - db

一般情况下,docker-compose.yml文件无需再进行任何编辑,虽然文件中引用了大量的变量,但是对这些变量的赋值操作都是在 .env 文件中,所以之后只需要单独编辑.env文件即可。


.env文件内容:

POSTGRES_PASSWORD=<填入数据库密码> # 这里自定义一个密码,推荐随机一个较短的 hash 字符串
POLICR_MINI_DATABASE_POOL_SIZE=10 # 数据库连接池的大小,已预设值
POLICR_MINI_SERVER_ROOT_URL=<填入根 URL 地址> # 完成配置以后web管理页面的访问地址,比如https://mini.example.com。
POLICR_MINI_SERVER_SECRET_KEY_BASE=<填入密钥> # 推荐随机一个较长的 hash 字符串
POLICR_MINI_SERVER_PORT=<填入端口号> # 例如 8080,其实就是宿主机上映射的端口号(同时也是容器内部应用使用的端口号,这个可以参看docker-compose.yml里面的变量定义)
POLICR_MINI_BOT_NAME=<填入机器人名称> # 请使用自己为policr mini的机器人的显示名称
POLICR_MINI_BOT_TOKEN=<填入机器人 Token> # 创建policr mini机器人时的token
POLICR_MINI_BOT_OWNER_ID=<填入机器人拥有者的 ID> # 就是机器人主人的TG账号的"ID"
POLICR_MINI_BOT_WORK_MODE=<填入工作模式> # 可选 polling/webhook。留空默认 polling
POLICR_MINI_BOT_WEBHOOK_URL=<填入 Webhook URL> # 可选配置,非 webhook 模式请留空
POLICR_MINI_BOT_WEBHOOK_SERVER_PORT=<填入 Webhook 的服务端口> # 可选配置,非 webhook 模式请留空
POLICR_MINI_BOT_GRID_CAPTCHA_INDI_WIDTH=180 # 网格验证的单个图片格子宽度,视验证资源修改
POLICR_MINI_BOT_GRID_CAPTCHA_INDI_HEIGHT=120 # 网格验证的单个图片格子宽度,视验证资源修改
POLICR_MINI_BOT_GRID_CAPTCHA_WATERMARK_FONT_FAMILY=Lato # 网格验证的水印字体(每一个单元格编号文字的字体)
POLICR_MINI_BOT_AUTO_GEN_COMMANDS=true # 是否自动生成机器人命令,已预设值
POLICR_MINI_BOT_MOSAIC_METHOD=spoiler # 马赛克方法,预设值为 spoiler。也可设置为 classic
POLICR_MINI_UNBAN_METHOD=until_date # 解封方法,预设值为过期时间。也可设置为 api_call
POLICR_MINI_OPTS="" # 可选配置,此处预设为空

注1:请根据以上内容和注释填充正确的变量值,注意填写的变量值不需要尖括号(<>),上面的注释只是为了美观。

注2:有些环境无法识别注释,所以赋值后也建议将 # 及后面的中文解释一并删除,我以前的一些文章中因为忽视了这个问题,导致实际使用的时候可能会报错。


对以上部分变量进行一些扩展解释:

  • POLICR_MINI_SERVER_ROOT_URL: 必选变量,用于生成后台链接。如果 /login 命令生成的链接无法访问,可能是此处配置不正确。如果你确保此变量配置的地址是正确的,那么,如果是公网回源,需要确认反向代理是否正确配置;或者如果是使用cloudflare tunnel方式回源,需要确认其对应的public hostname是否正确配置。不过,和wordpress以及nextcloud不同,这个地址不会限制其他可达地址的访问。
  • POLICR_MINI_DATABASE_POOL_SIZE: 数据库连接池的大小。粗略的讲,越小的池服务器消耗越低(数据库内存、CPU 占用低),但是不适合并发高的实例。越大的池,服务器资源消耗越高,但是能应付更大的并发连接。对于仅仅部署用来服务自己的群的实例,将此值设置到尽可能小即可(可小于 10)。目前官方实例此配置的值为 10,我自己的机器人因为只是个人使用,所以设置成5
  • POLICR_MINI_BOT_NAME: 可选变量,用于显示官网的 LOGO 文字和网页标题的后缀。因为机器人很多时候名称带有版本信息(而显示这些是多余的),所以特地提供一个变量来自定义。当我们定义值为 Policr Mini 时,即便机器人当前的名称是 Policr Mini (beta) 仍可以让官网显示为 Policr Mini注意:若未设置此变量,将直接使用 bot 的显示名称。
  • POLICR_MINI_BOT_OWNER_ID: 必选变量,用于后台对最高管理员的身份的识别。这里的 ID 不是用户名,是一串数字。在官方 TG 客户端中,几乎不会显示这个 ID,可以通过向 @userinfobot 发送命令/start来获取这个 ID:
    image.png
  • POLICR_MINI_BOT_AUTO_GEN_COMMANDS: 自动生成机器人命令。将此值设置为 true 将在每次启动时自动生成或更新机器人的命令列表,不需要再人工通过 BotFather 设置。有时候,你或许想隐藏某些命令或全部命令,则可以将此值设置为 false

另外,依照惯例,我还是留下使用docker run命令格式的搭建方式,以便万一有朋友需要用到。当然,这种需要postgres数据库和Policr Mini应用分开搭建,且数据库要保证在Policr Mini应用启动之前就已经正常运行;同时还需要单独创建一个”bridge”网络,因为Policr Mini会使用postgres数据库的容器名对其进行访问;最后,我为了方便,放弃了”.env”文件,把赋值都用-e参数来完成。

postgres数据库的docker run格式命令:

docker run --name db -d --restart=always --net=public-net \
  -e POSTGRES_PASSWORD=password \
  -e POSTGRES_DB=policr_mini_prod \
  -v /docker/policr-mini/data:/var/lib/postgresql/data \
  postgres:16

Policr Mini应用的docker run格式命令:

docker run --name server -d --restart=always --net=public-net \
  -e POLICR_MINI_DATABASE_URL="ecto://postgres:password@db/policr_mini_prod" \
  -e POLICR_MINI_DATABASE_POOL_SIZE=5 \
  -e POLICR_MINI_SERVER_ROOT_URL=https://example.com \
  -e POLICR_MINI_SERVER_SECRET_KEY_BASE=xxxxxxxxxx \
  -e POLICR_MINI_SERVER_PORT=8080 \
  -e POLICR_MINI_BOT_TOKEN=xxxxxxxxx \
  -e POLICR_MINI_BOT_NAME=xxxxxxxx \
  -e POLICR_MINI_BOT_OWNER_ID=xxxxxxxx \
  -e POLICR_MINI_BOT_GRID_CAPTCHA_INDI_WIDTH=180 \
  -e POLICR_MINI_BOT_GRID_CAPTCHA_INDI_HEIGHT=120 \
  -e POLICR_MINI_BOT_GRID_CAPTCHA_WATERMARK_FONT_FAMILY=lato \
  -e POLICR_MINI_BOT_ASSETS_PATH=/_assets \
  -e POLICR_MINI_BOT_AUTO_GEN_COMMANDS=true \
  -e POLICR_MINI_BOT_MOSAIC_METHOD=spoiler \
  -e POLICR_MINI_UNBAN_METHOD=until_date \
  -e POLICR_MINI_OPTS="" \
  -p 8080:8080 \
  -v /docker/policr-mini/_assets:/_assets \
  gramoss/policr-mini:latest

部署TG群验证机器人

拉起Policr Mini应用

注:再强调一次,需要先确保部署Policr Mini的设备处于科学的环境内,或者至少能够与TG API正常通信(就是https://api.telegram.org),否则即便拉起Policr Mini也无法正常启动。


使用如下命令拉起Policr Mini应用:

cd /docker/policr-mini
docker-compose up -d

此时,如果一切正常,使用之前在.env文件”POLICR_MINI_SERVER_ROOT_URL”变量中设定的访问地址即可正常访问web页面:
image.png

将验证机器人加入TG群

按照如下步骤在TG群中添加验证机器人并将其设置为群管理员:

image.png

image.png

image.png

image.png

将验证机器人添加为管理员:
image.png

image.png

启用”新成员验证”:
image.png

image.png

最后,在TG群里使用/sync命令(也可以在验证机器人私聊界面使用)与部署在本地的Policr mini应用同步信息:
image.png

验证机器人后台设置

在验证机器人私聊界面可以使用/login命令获得令牌:
image.png

可以直接使用上图下方红框中的”进入后台”按键进入后台(前提是之前指定的web地址可以正常访问)。

如果需要手动登入控制台,需要上图中获取的令牌在WEB页面的后台处粘贴:

image.png

然后即可进入后台配置界面,后台中最重要的设置项是”全局属性”:
image.png

一般保持默认值就行,不过如果有特殊要求可以自行修改,甚至可以在”方案定制”里修改验证机器人的默认行为:
image.png

这些我就不多说了,选项比较多,大家到时候自己看吧。

进阶技能:webhook模式

webhook模式简介

在 Telegram Bot API 中,Bot 可以通过两种方式接收更新:

Long Polling 模式:Bot 主动向 Telegram 服务器轮询获取更新。

Webhook 模式:Telegram 服务器主动将更新推送到Bot的”Webhook URL”。

Policr Mini 支持 Webhook 模式,而这个模式需要一个 HTTP 服务器运行(后面会讲到),以接收 Telegram 推送的消息更新。

默认配置下机器人将以 polling模式启动,这是一种简单有效的模式,无需额外配置,也是我推荐一般朋友使用的方式,因为真的够简单。但是polling的工作模型决定了其响应速度会慢于webhook模式(而且轮训就意味着需要频繁向TG API发送请求,会不会有什么不好的影响也不清楚),官方有关于webhook的描述(不过这个描述太简洁了,有几个需要在实际配置时注意的事项并没有讲清楚):
image.png

对于已经成功使用polling模式部署了验证机器人的同学来说,如果有上进心(折腾劲)的话,可以继续挑战一下webhook模式。

webhook相关参数解释

在docker-compose.yml文件中,environment:部分有4个被“#”注释掉的内容,如下图所示:

image.png

一般而言,配置webhook模式只需要上图红框中的3项,所以需要在docker-compose.yml文件里删掉这3项前面的”#”符号来取消注释。这3个选项分别对应的变量含义在”.env”文件中都有说明:
image.png

讲道理,这些其实还是很容易理解的,设置完后的示例如下:

POLICR_MINI_BOT_WORK_MODE=webhook
POLICR_MINI_BOT_WEBHOOK_URL=https://webhook.example.com/updates_hook
POLICR_MINI_BOT_WEBHOOK_SERVER_PORT=8080

这里有2个注意事项:

1、POLICR_MINI_BOT_WEBHOOK_URL

对于用在webhook的网址https://webhook.example.com而言,正确配置是webhook模式正常工作的前提。这里的正确配置,是指针对不同回源方式,进行相应的适配的设置:

  • 公网地址回源:如果选择这种回源方式,需要正确配置反向代理,这点和前面的另一个涉及访问网址的选项”POLICR_MINI_SERVER_ROOT_URL”是一样的,不过有一点要注意,就是不能开”人机检测”,否则会导致webhook模式失败(毕竟TG给webhook网址发的消息肯定不是人发的~)。如果担心安全问题,可以设置TG IP范围的白名单。
  • cloudflare tunnel:如果选择这种回源方式,就不用折腾反向代理,但是要注意,如果设置了WAF策略并开启了传说中的5秒盾,那么需要正确设置WAF的跳过策略让TG发来的消息能正常达到webhook的网址,以我的跳过配置为例:
    image.png

2、POLICR_MINI_BOT_WEBHOOK_SERVER_PORT

在前面介绍webhook模式的时候,我提到过:”Policr Mini 支持 Webhook 模式,而这个模式需要一个 HTTP 服务器运行,以接收 Telegram 推送的消息更新。”,这个选项的作用其实就是在容器内部开一个端口来运行HTTP服务器(“容器内部”要划重点)。

而在docker-compose.yml文件中,port部分默认只生效了用于POLICR_MINI_SERVER_ROOT_URL选项的端口,而关于POLICR_MINI_BOT_WEBHOOK_SERVER_PORT选项是处于未生效状态(被注释掉了):
image.png

官方部署上也没提这点,我开始没注意,后来折腾半天没成功后,才发现对外端口都没打开,然后才注意这个,有点坑~,所以大家要记得,启用webhook模式需要取消注释,就是删掉”#”号。

webhook模式验证

如果POLICR_MINI_BOT_WORK_MODE选项指定了webhook,那么policr mini会使用webhook模式向Telegram进行注册,这个时候可以用以下方式验证policr mini在Telegram上是否成功注册为webhook模式:

curl "https://api.telegram.org/bot/getWebhookInfo"

注:直接在浏览器里访问以上URL也是一样的,实际使用的时候bot后面直接跟验证机器人的token就行了,<>符号要去掉。

如果正常的话,会得到类此以下的响应:

{
  "ok": true,
  "result": {
    "url": "https://your-server.com/webhook-url",
    "has_custom_certificate": false,
    "pending_update_count": 0
  }
}

以我的响应为例:
image.png

可选进阶技能:自建本地”Telegram BotAPI”

environment:中还有一个”POLICR_MINI_BOT_API_BASE_URL”选项,我之前并没有提,因为常规部署webhook时用不到,只有需要部署本地API的时候才需要用到。那么,什么是本地API,它有什么功能呢?

简单来说,本地”Telegram Bot API”就像是一个”中间代理层”,它起到了以下几个核心功能:

1. 解除官方 API 的限制

请求速率限制:官方 API 对于每秒的请求数量有限制(通常是每秒 30 次)。本地 API 允许你突破这些限制,因为它可以缓存和优化与 Telegram 服务器的交互。

并发限制:本地 API 可以配置更高的并发连接数(通过参数如 max_connections),从而更好地处理高流量的请求。

2. 提高隐私性

• 在与 Telegram 官方 API 通信前,所有消息内容都会先与本地 API 通信。

• 这意味着:敏感信息可以在本地过滤或加密,避免直接传输到 Telegram 官方服务器;可以对消息进行本地日志记录或分析,满足某些合规性要求。

3. 优化和整合流量

聚合请求:本地 API 可以整合来自多个 Bot 或多个用户的请求后再发送给 Telegram 官方服务器,减少与官方服务器的直接交互次数。

缓存和速率控制:通过本地 API,可以对一些重复或频繁的请求(如获取群成员列表)进行缓存,减少不必要的流量。

4. 便于调试和控制

• 本地 API 提供更细粒度的日志和控制能力,让你可以更方便地监控、调试和优化 Bot 的行为。

• 例如,监测哪些请求最耗时,或捕获 Telegram 官方 API 的错误响应以提前处理。

5. 最终数据发送给 Telegram

• 在本地完成所有优化后,本地 API 会以最小的延迟和优化后的频率将数据发送给 Telegram 官方服务器。

• 这就像一个代理服务器,只是它更智能,并能执行更多自定义的操作。

在高流量场景、对隐私要求高或需要自定义控制的情况下,这种架构非常有用,不过对于我而言,这些就完全没用了,所以我也没动力折腾了,有兴趣的朋友可以自己尝试下。

注:如果使用本地运行API并直接处理来自Telegram的消息,那么本地API会定期拉取Telegram的更新,而不是依赖Webhook来接收(也就是说,其实本地API和Webhook是互斥的两种方式:一个是主动访问TG,一个是被动等待TG来访问)。在使用本地API时,流程变成了你定时主动向Telegram请求更新(其实就是轮训),而不是等待Telegram推送更新,所以在响应上可能比webhook方式慢一点,当然,换来的就是上面讲到那些核心功能,同时,也不需要对外暴露一个webhook的访问网址了。

验证机器人常规功能

在成功搭建验证机器人后,在和验证机器人的私聊界面,提供了几个常规的功能(有几个在前面也提到过):

image.png

/ping可以测试机器人是否处于活动状态(就是TG能否和你部署在本地的policr mini应用正常通信),如果是正常的,会有如下显示:
image.png

/sync可以同步群输入到本地的policr mini应用,如果正常,会有一个粒子散开的特效,因为速度太快,不好截图,只截成这样:
image.png

/login会给出之前配置的web后台网址,可以直接点击登录(前提是正确配置并可以访问):
image.png

/console是以后用于替代后台功能的控制台:
image.png

看起来的确是要高大上了很多:
image.png

本地部署(macos环境)

如果是win或者mac环境,可以通过安装docker for desktop来实现支持(下载地址如下:https://www.docker.com/products/docker-desktop/):
image.png

我是用docker desktop for mac进行安装尝试的,这里我不打算多讲,就提下2个关键点:

1、docker desktop for mac默认是支持docker-compose的,但是命令和linux下略有不同,没有”-“,比如,命令”docker-compose up -d”,在mac下变成了”docker compose up -d”,以此类推。

2、mac默认”.”开头的文件只能是系统文件,所以直接创建.env文件,会报错:

image.png

在linux环境下使用docker-compose up -d能正常工作的前提是工作目录下同时存在”docker-compose.yml”和”.env”文件,而mac下因为不能用”.env”的文件名,所以实际运行”docker compose up -d”命令时,会出现如下报错:
image.png

其实就是不能从”.env”文件里获取变量的具体赋值,这也正常,本来”.env”文件就没了。

理论上解决办法有2个:

1、在docker-compose.yml里显式指定环境变量文件,类似如下:

    env_file:
      - policrmini.env

这样做的目的是避免非要用”.env”做环境文件名的尴尬场景,不过嘛,我尝试了下,并没有成功,也不知道为啥,懒得研究了。

2、直接放弃”.env”文件,把所有赋值直接写到”docker-compose.yml”文件中,如下:

image.png

这种方式成功了。

后话

关于Policr Minil Lnux部署环境的科学方式,我大概说几句。

1、国外VPS:这种没什么说的,不需要科学,部署起来没任何问题。

2、国内VPS(全局科学):这种也没有什么问题,其实和国外VPS也没区别

3、国内VPS(白名单式科学):这种只要能保证域名api.telegram.org加入白名单即可,也不影响使用。

4、国内VPS(不能对VPS设置科学):这种场景可能是因为VPS有其他作用(生产环境之类),不能进行有全局影响的操作。

那么,此时还有一种办法就是靠docker环境本身的代理了,一般比较推荐创建或者编辑/etc/docker/daemon.json文件的办法,先打开daemon.json文件:

vim /etc/docker/daemon.json

然后把一下内容复制粘贴到daemon.json文件中:

{
  "proxies": {
    "default": {
      "httpProxy": "http://your-proxy-server:port", # your-proxy-server:port是你使用的代理服务器地址和端口
      "httpsProxy": "http://your-proxy-server:port",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}

然后重启docker服务:

systemctl restart docker

采用这种方式,可以让拉取镜像和容器启动前的流量均可以使用代理(会影响所有docker,大家需要评估是否适合自己的环境,也可能会有一些特殊情况:比如创建或者编辑这个”daemon.json”文件反而会导致docker服务异常的,这种时候就要靠大家自己排查了)。

为什么我要提”容器启动前的流量”这一点呢?因为另一种影响更小的容器使用代理的方式,是在创建容器时使用环境参数来指定代理,以docker-compose.yml的配置为例,只要在environment:部分加上如下配置就可以实现只是这个docker使用代理上网:

   HTTP_PROXY: http://your-proxy-server:port
   HTTPS_PROXY: http://your-proxy-server:port
   NO_PROXY: localhost,127.0.0.1

其实这种方式影响最小,是最推荐的方式,但是嘛,这种方式是需要容器完全正常启动后才能生效的,只是Policr Mini有点坑的是:在启动阶段就会和TG API通信,如果无法通信,则容器就无法启动~~,所以就不能使用这种最推荐的、影响最小的方式了。

另外,本文中也涉及到了反向代理和cloudflare tunnel的知识,不熟悉的朋友可以参考我之前写的文章:

  • 反向代理

如果使用宝塔面板,反向代理配置可以参考文章:linux面板系列 配置反向代理并使用非443端口进行发布;如果使用NPM,反向代理配置可以参考文章:docker系列 使用docker基于NPM搭建自己的反向代理)。

  • cloudflare tunnel

可以参考文章:家庭数据中心系列 通过tunnel技术,让无公网IP的家庭宽带也能白嫖cloudflare实现快速建站(推荐)

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       
error:
zh_CN
春节
快乐