转载自:原文链接: https://yanh.tech/2023/08/deployment-process-extract_forward_tgbot/
前置准备
- 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
- (可选)获取自己 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
无须更改,执行保存 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
原生部署转发机器人
- 需要先部署 网页记事本 ,且假设其
_tmp
目录位于/var/www/webnote/_tmp/
,推荐参考本站文章:分享我使用两年的极简网页记事本 。下面的流程是按照它的「原生安装」进行的,Docker 安装下_tmp
目录读写权限问题棘手,不过全用 root 倒也能运行。 - 注册一个 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 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