[转载] 最简安装,Docker 安装 转发机器人

转载自:原文链接: https://yanh.tech/2023/08/deployment-process-extract_forward_tgbot/ 前置准备 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人 (可选

转载自:原文链接: https://yanh.tech/2023/08/deployment-process-extract_forward_tgbot/

前置准备

  1. 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
  2. (可选)获取自己 Telegram 账户的 chat_id,不填就不能运行管理员命令

全复制并执行,一键创建工作目录

myserve="ef_tgbot"
mkdir -p ~/myserve/$myserve && cd ~/myserve/$myserve && mkdir -p backup forward_message configs

根据注释自定义下面的配置文件,然后复制一键即可保存到机器上

cat > configs/config.yaml << EOF
is_production: true
chat_id: 2066666604   # 你的 tg 用户 ID,会作为管理员,不能为空,没有随便填
bot_token: 5366666619:AAGG3rvfly2comtechniqueTIzc8y5z2pY9xmY
push_dir: https://forward.vfly2.eu.org/   # 推送路径,最简安装这里选择一个网络记事本的网址,这里使用我搭建的,可以不用改
 
# 下面的每一个都可以省略
special_channel: 
  image: [woshadiao, shadiao_refuse]   # 转发这里的频道的消息给机器人,机器人会接收视频和图片
 
process_file:
  gif_max_width: 300   # 视频转的 GIF 的最大宽度
  video_max_size: 25   # 超过这个大小的视频不接收,单位是 MB
EOF

image.png

无须更改,执行保存 docker-compose.yml 到机器上

cat > docker-compose.yml << EOF
---
version: "3"
 
services:
  tgbot:
    image: ahfeil/extract_forward_tgbot:latest
    container_name: efTGbot
    restart: always
    volumes:
      - ./configs:/ef_tgbot/configs
      - ./backup:/ef_tgbot/backup
      - ./forward_message:/ef_tgbot/forward_message
EOF

拉取镜像

docker compose pull

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

docker compose up -d

如果有问题,用这个查看日志

docker logs efTGbot

关闭机器人

docker compose down

原生部署转发机器人

  1. 需要先部署 网页记事本 ,且假设其 _tmp 目录位于 /var/www/webnote/_tmp/ ,推荐参考本站文章:分享我使用两年的极简网页记事本 。下面的流程是按照它的「原生安装」进行的,Docker 安装下 _tmp 目录读写权限问题棘手,不过全用 root 倒也能运行。
  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 update
sudo apt install python3 python3-pip python-venv
 
# 手动安装 ffmpeg ,检查安装情况 ffmpeg -version
sudo apt install ffmpeg

为系统安装中文字体,如果不使用“添加说明文字”功能,也可以不装。

下载字体文件

curl -O https://raw.githubusercontent.com/gasharper/linux-fonts/master/simsun.ttc

把字体文件放在一个合适的目录。一般来说,用户自定义的字体可以放在 ~/.fonts/(针对当前用户)或者 /usr/share/fonts/(对所有用户生效)这两个目录下。

font_dir=/usr/share/fonts/chinesesudo mkdir -p $font_dir && sudo mv simsun.ttc $font_dir && cd $font_dir

更新字体缓存,这样系统才能够识别和使用新的字体。

sudo fc-cache -fv

查看是否有添加成功

fc-list :lang=zh

安装

创建虚拟环境

python3 -m venv .env

激活虚拟环境

source .env/bin/activate

安装依赖的库

pip install -r requirements.txt

根据注释自定义下面的配置文件,然后复制一键即可保存到机器上

cat > config.yaml << EOF
is_production: true
chat_id: 2111111114   # 你的 tg 用户 ID,会作为管理员,不能为空,没有随便填
bot_token: 6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU
push_dir: /var/www/webnote/_tmp/   # 推送路径,这里使用同机器搭建的网络记事本
domain: https://forward.vfly2.eu.org/   # 网络记事本的网址,最后以 / 结尾
# path:   # 如果是一个人用,可以在这里规定推送时的路径,也可以用 /set 命令实现
 
# 下面的每一个都可以省略
special_channel: 
  image: [woshadiao, shadiao_refuse]   # 转发这里的频道的消息给机器人,机器人会接收视频和图片
 
process_file:
  gif_max_width: 300   # 视频转的 GIF 的最大宽度
  video_max_size: 25   # 超过这个大小的视频不接收,单位是 MB
EOF

先运行一下,测试机器人是否正常工作(可以在 Telegram 上向机器人转发消息,检查功能)

python extract_forward_tgbot.py

这时除了不能推送保存的消息到网页之外,其他功能应该都正常。不能推送是因为 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=/home/vfly2/pythonServe/extract_forward_tgbot/.env/bin/python /home/vfly2/pythonServe/extract_forward_tgbot/extract_forward_tgbot.py      # 修改
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

迁移

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

更新

重启机器人时,推荐先用 /shutdown 命令,保存通过 /set 设置的参数,再重启。

先停止运行

sudo systemctl stop extract_forward_tgbot
cd ~/pythonServe/extract_forward_tgbot

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

git pull

然后重启(如果报错,估计是修改了其他依赖库,可进入虚拟环境,安装库)

sudo systemctl start extract_forward_tgbot
sleep 3
sudo systemctl status extract_forward_tgbot
LICENSED UNDER CC BY-NC-SA 4.0
Comment