Telegram 转发机器人 的部署流程

下面文章已经过时,新版在「技焉洲」更新: Telegram 转发机器人的安装步骤

放在新站点「技焉洲」的原因: 承飞之咎与技焉洲 – 承飞之咎 (vfly2.com)




若无单独说明,按照文章代码块中命令的顺序,一条一条执行,即可实现目标。
适用系统:Debian 系发行版,包括 Ubuntu 和 Armbian,其他发行版按流程稍改命令一般也可。

走通 Docker 部署预计时间:20 分钟

走通原生部署预计时间:15 分钟(前置条件的满足还需要 30 分钟,因此总共 45 分钟)


项目地址: AhFeil/extract_forward_tgbot: 存储转发给它的消息到文件中,并能推送到网页,方便查看编辑信息 (github.com)

仓库里的只能单人使用,因为网址路径不是随机的(因此很容易实现多人),请宽容我暂时不上传多人版,延迟上传。

Docker 部署 转发机器人

目前有读写权限问题:在目录 _tmp 里,如果是机器人先创建的文件,webnote 只能读取,无法改写。因为机器人的用户是 vfly2 ,而 webnote 是 www-data

前置准备

  1. 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
  2. (可选)获取自己 Telegram 账户的 chat_id

附带装 webnote

全复制并执行,一键创建工作目录并开放端口

myserve="eftgbot_webnote"
sudo ufw allow 8088/tcp comment $myserve && sudo ufw reload
mkdir -p ~/myserve/$myserve && cd ~/myserve/$myserve && mkdir _tmp backup forward_message && sudo chmod 777 _tmp backup forward_message

根据注释自定义,然后执行,一键创建 docker-compose.yml 文件 。只需要自定义注释那里的四个变量即可,其他无须改动

cat > docker-compose.yml << EOF
---

version: "3"

services:
  extract_forward_tgbot:
    image: ahfeil/extract_forward_tgbot:latest
    container_name: efTGbot
    restart: always
    environment:
      - CHAT_ID=2111111114   # 这四个环境变量都需要自定义
      - BOT_TOKEN=6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU
      - PUSH_DOMAIN=http://custom.vfly2.com:8088/   # 解析到服务器的域名
      - PUSH_PATH=push_from_tg   # 随意的字符串即可
    volumes:
      - ./_tmp:/home/vfly2/extract_forward_tgbot/_tmp
      - ./backup:/home/vfly2/extract_forward_tgbot/backup
      - ./forward_message:/home/vfly2/extract_forward_tgbot/forward_message

  minimalist-web-notepad:
    image: ahfeil/minimalist-web-notepad:latest
    container_name: webnote
    restart: always
    ports:
     - "8088:80"
    volumes:
     - ./_tmp:/var/www/html/_tmp
EOF

环境变量的含意可以跳到下面「安装」一节查看。

拉取容器镜像

docker compose pull

启动容器(这时就可以在 Telegram 上试用机器人了)

docker compose up -d
docker compose down

如果想了解更多关于 webnote 网页记事本,可以查看这篇文章: [[分享我使用两年的极简 网页记事本]]


不装 webnote

如果 不想安装 webnote ,也可以利用机器人最近添加的 “自定义命令” 功能。

它可以在机器人收到 \push 指令后,执行一个命令,比如通过 curl 将转存的内容推送到其他 webnote 上,这里以 AhFei 创建的 https://forward.vfly.app 为例。

myserve="eftgbot_only"
mkdir -p ~/myserve/$myserve && cd ~/myserve/$myserve && mkdir _tmp backup forward_message && sudo chmod 777 _tmp backup forward_message

记得修改变量

cat > docker-compose.yml << EOF
---

version: "3"

services:
  extract_forward_tgbot:
    image: ahfeil/extract_forward_tgbot:latest
    container_name: efTGbot
    restart: always
    environment:
      - CHAT_ID=2111111114   # 自定义 CHAT_ID 和 BOT_TOKEN
      - BOT_TOKEN=6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU
      - PUSH_DOMAIN=http://custom.vfly2.com:8088/   # 这个无用,但不能缺少
      - PUSH_PATH=push_from_tg   # 这个无用,但不能缺少
      - COMMAND_EXEC=curl -k --data-urlencode text@{contentfile} https://forward.vfly.app/have_a_try
      # 自定义 https://forward.vfly.app/have_a_try ,其他无须改动
    volumes:
      - ./_tmp:/home/vfly2/extract_forward_tgbot/_tmp
      - ./backup:/home/vfly2/extract_forward_tgbot/backup
      - ./forward_message:/home/vfly2/extract_forward_tgbot/forward_message
EOF

运行,在 Telegram 上试试吧!

docker compose up -d

以下是原生部署流程。

前置条件

  1. 需要先部署 网页记事本 ,且假设其 _tmp 目录位于 /var/www/webnote/_tmp/ ,推荐参考本站文章:分享我使用两年的极简网页记事本 。下面的流程是按照「原生安装」进行的,Docker 安装下 _tmp 目录读写权限问题暂时不会,因此不能正常运行。
  2. 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
  3. (可选)获取自己 Telegram 账户的 chat_id

安装

推荐使用普通用户,这里假设用户名为 vfly2,并把工作目录设定为家目录下的 pythonServe

创建工作目录( /home/vfly2/pythonServe ):

mkdir -p ~/pythonServe/ && cd ~/pythonServe/

拉取仓库(并创建备份和保存目录,这是必需的):

git clone https://github.com/AhFeil/extract_forward_tgbot.git && \
cd extract_forward_tgbot && mkdir backup forward_message # 创建备份目录和保存目录

安装环境和依赖( Python versions 3.8+ )

sudo apt install -y python3 python3-pip curl && \
pip3 install -r requirements.txt

如果要使用 –exec 执行自定义命令,比如 curl,需要安装 curl。

Windows 上下载 curl :curl for Windows,并添加到环境变量(搜索栏搜「环境变量」即可)

先运行一下,测试机器人是否正常工作(可以在 Telegram 上向机器人转发消息,检查功能),根据实际情况修改下面的所有参数:

/usr/bin/python3 ~/pythonServe/extract_forward_tgbot/extract_forward_tgbot.py \
--chat_id 2111111114 \
--bot_token 6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU \
--push_dir /var/www/webnote/_tmp/ \
--domain https://forward.vfly.app/ \
--path push_from_tg # 如果加上了下一行 exec ,别忘了本行末尾的 \
# --exec "curl --data-urlencode text@{contentfile} https://forward.vfly.app/try"

这里,

  • chat_id,是管理员的用户 id,目前也只有停止运行一种独有命令
  • bot_token,机器人的 token
  • push_dir,推送时,将存储的信息保存到,这个目录下的文件中
  • domain,网页记事本的网址部分
  • path,网页记事本的路径部分。如上面的例子,最终推送网页的地址是 https://forward.vfly.app/push_from_tg 。
  • exec,在发送 \push 指令后,执行一个命令,设计用于自定义推送,比如 curl 到 webnote。 {contentfile} 是存储转存内容的文本文件。

这时还不能推送转存消息到网页,因为 vfly2 没有写入权限到 /var/www/webnote/_tmp/

设置权限

设置 /var/www/webnote/_tmp/ 权限为 775,组改成 vfly2,

sudo chown www-data:vfly2 /var/www/webnote/_tmp
sudo chmod 775 /var/www/webnote/_tmp

且将该目录下新创建的文件默认权限设为 664 ,组为 vfly2

sudo apt-get update && sudo apt-get -y install acl && \
sudo setfacl -d -m u:www-data:rwx,g:vfly2:rwx,o::r /var/www/webnote/_tmp/

这时候可以再运行一次上面的命令,应该就能够推送转存了。

使用 systemd 守护进程

sudo vim /lib/systemd/system/extract_forward_tgbot.service

根据实际情况,修改 WorkingDirectory、User、Group、ExecStart 这四个就可以了。

[Unit]
Description=extract_forward_tgbot Server
After=network.target

[Service]
WorkingDirectory=/home/vfly2/pythonServe/extract_forward_tgbot   # 修改为实际目录
User=vfly2   # 修改
Group=vfly2   # 修改
Type=simple
ExecStart=/usr/bin/python3 /home/vfly2/pythonServe/extract_forward_tgbot/extract_forward_tgbot.py \
--chat_id 2111111114 \
--bot_token 6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU \
--push_dir /var/www/webnote/_tmp/ \
--domain https://forward.vfly.app/ \
--path push_from_telegram                     # 修改
ExecStop=/bin/kill -s HUP $MAINPID
Environment=PYTHONUNBUFFERED=1
RestartSec=15
Restart=on-failure

[Install]
WantedBy=default.target
sudo systemctl daemon-reload
sudo systemctl enable --now extract_forward_tgbot
sudo systemctl status extract_forward_tgbot
sudo systemctl stop extract_forward_tgbot
sudo systemctl start extract_forward_tgbot

如果这里启动失败,日志显示找不到 /usr/bin/python3 和 工作目录,希望留言。
因为我在使用 PR 机子,按本文测试走通的过程中,遇到这个问题,但是这个报错根本不合实际,且在其他机子上运行良好,不知原因。

迁移

只需要转移旧的数据文件 2 个,在项目目录下的 forward_message 中

更新

先停止运行

sudo systemctl stop extract_forward_tgbot

在工作目录下,用 Git 拉取最新版本:

git pull

然后重启(如果报错,估计是添加了新的参数)

sudo systemctl start extract_forward_tgbot

原文链接: https://blog.vfly2.com/2023/08/deployment-process-extract_forward_tgbot/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 承飞之咎 (blog.vfly2.com)

保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰可重复的实用技能,欢迎使用 RSS 订阅,也欢迎留言指正。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。

没有 RSS 订阅器的话,也可以关注公众号:承飞之咎 了解最新内容。

评论

  1. sb
    4 月前
    2024-1-10 21:26:37

    直接存notion的机器人不是现成的吗?

    • sb
      4 月前
      2024-1-10 22:09:28

      不知道这个机器人,最关键的是,不用 Notion

发送评论 编辑评论


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