下面文章已经过时,新版在「技焉洲」更新: Telegram 转发机器人的安装步骤
放在新站点「技焉洲」的原因: 承飞之咎与技焉洲 – 承飞之咎 (vfly2.com)
若无单独说明,按照文章代码块中命令的顺序,一条一条执行,即可实现目标。
适用系统:Debian 系发行版,包括 Ubuntu 和 Armbian,其他发行版按流程稍改命令一般也可。走通 Docker 部署预计时间:20 分钟
走通原生部署预计时间:15 分钟(前置条件的满足还需要 30 分钟,因此总共 45 分钟)
项目地址: AhFeil/extract_forward_tgbot: 存储转发给它的消息到文件中,并能推送到网页,方便查看编辑信息 (github.com)
仓库里的只能单人使用,因为网址路径不是随机的(因此很容易实现多人),请宽容我暂时不上传多人版,延迟上传。
Docker 部署 转发机器人
目前有读写权限问题:在目录
_tmp
里,如果是机器人先创建的文件,webnote 只能读取,无法改写。因为机器人的用户是 vfly2 ,而 webnote 是 www-data
前置准备
- 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
- (可选)获取自己 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
以下是原生部署流程。
前置条件
- 需要先部署 网页记事本 ,且假设其
_tmp
目录位于/var/www/webnote/_tmp/
,推荐参考本站文章:分享我使用两年的极简网页记事本 。下面的流程是按照「原生安装」进行的,Docker 安装下_tmp
目录读写权限问题暂时不会,因此不能正常运行。 - 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
- (可选)获取自己 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 订阅器的话,也可以关注公众号:承飞之咎 了解最新内容。
直接存notion的机器人不是现成的吗?
不知道这个机器人,最关键的是,不用 Notion