开发一个自己的Telegram Bot

虽然每天都在用Telegram Bot,但一直没深入了解过,最近折腾了一下,发现TG机器人能实现的功能太多了,非常实用,API也很完善,然而还是遇到了不少问题,特别是用Nginx配合Webhook的时候,搞了一晚上都没成功。因此简单的记录一下,排一下坑。

准备工作

这里跳过Bot的申请过程。网上有多种语言的集成API,PHP、Node.js、Rust、Python等等,虽然没学过Python,但看了看文档相对简单,因此就决定是它了。API则选择了pyTelegramBotAPI,pyTelegramBotAPI推荐使用Python3.6-3.9版本,我使用的是Python3.7.3

安装Virtual Environment

apt install python3-pip
pip3 install virtualenv

创建一个工程目录:

mkdir /home/tg_bot
cd /home/tg_bot
virtualenv first_tg_bot

激活virtualenv:

source first_tg_bot/bin/activate

接下来的依赖就会安装到虚拟环境中,要退出环境的话使用deactivate命令。

Read More >

使用Nginx实现TCP四层反向代理

众所周知,海外高性能服务器加不错的线路等于贵得离谱,然而不看网络的话,价格就便宜不少,再选择一台低配的线路不错的VPS作为前端进行代理的就划算很多。做站的话一般通过nginx进行http或者tcp代理,以前一直都在使用http反向代理,好处是配置简单效果也不差,但如果进行https代理,前端也需要配置ssl证书,从安全的角度来说显然是不合理的。因此折腾了下通过Nginx Stream模块进行tcp代理,因为只是传输层协议,便可以不用配置ssl证书。

然而无论那种方式,对于做站来说,都有获取到真实ip的需求。如果是http代理的话,可以通过编译ngx_http_realip_module模块并设置proxy_set_header实现,这里不再讨论。这篇文章着重说下tcp代理的实现方法和过程。

要使用stream模块,编译Nginx的时候需要加上--with-stream参数,然后再nginx.conf中配置,一个简单的代理模型如下:

stream{
    ...
    upstream backend{
        server your.domain.com:443
    }

    server{
        listen 443 ssl;
        proxy_pass backend;
        ...
    }
}

Read More >

使用acme.sh自动签发和更新证书

手里吃灰的域名越来越多,偶尔还是会拿来测试测试,每次手动配置证书就很麻烦,刚好最近Let's Encrypt Authority也由X3更新为了R3版本,使用了新的OCSP地址,解决了污染问题。(此处想说点什么,但还是算了QAQ)因此又用回acme.sh自动签发更新证书,官方有很详细的使用文档,这里只做简单记录方便自己查阅。

Read More >

安装File Browser轻量网盘工具

乘着黑五打折,买了一个大盘鸡,准备再次搭建个人网盘,上次用Seafile搭建的网盘由于独服太贵,GIA带宽又太小,没用多久就挂了。同时也发现Seafile虽然好,但并不适合自己,其实自己的需求很简单,甚至前段时间都是直接一个http单页浏览文件的,然而有时候也需要在线看一下文档,因此更需要一款轻量化的网盘工具,无意中发现了File Browser,从介绍来看很不错,最近也对Go语言颇有好感,便安装来试一试。

Read More >

Linux定时自动备份数据

鉴于上次的服务器崩溃事件,写一个数据自动备份脚本就显得尤为重要。折腾了一晚,最终实现效果是每晚三点自动备份数据库和网站等数据并使用Openssl加密归档,保留最近一个月的数据,通过rclone同步到Google Drive和Onedrive上,这样就万无一失了🍟

Shell脚本

脚本是自己使用,因此比较简单。

#!/bin/bash
# Writen by Atp on Nov 15, 2020
# Website:  https://www.zatp.com

DATE=`date +%Y%m%d`
BACKUP_TEMP_PATH=/backup/tmp
# Database
DB_NAME=
DB_USR=
DB_PW=
DB_OUT_NAME="db_$DATE"
# Website
WEB_PATH=
WEB_OUT_NAME="web_$DATE"
# Archive
ARCHIVE_PATH=/backup/archives
ARCHIVE_LOG_FILE=/backup/log/backup.log

# Backup mysql
# mysqldump -u$DB_USR -p$DB_PW --databases $DB_NAME > $BACKUP_TEMP_PATH/$DB_OUT_NAME.sql
mysqldump --login-path=$DB_USR --databases $DB_NAME > $BACKUP_TEMP_PATH/$DB_OUT_NAME.sql

# Backup webdsite
cd $WEB_PATH
zip -rq $BACKUP_TEMP_PATH/$WEB_OUT_NAME.zip *

# Archive files
cd $BACKUP_TEMP_PATH
# tar cf - * | openssl enc -e -aes-128-cbc -pbkdf2 -k [password] -out $ARCHIVE_PATH/$DATE.tar.aes
tar cf - * | gpg -e -r [recipient] -o $ARCHIVE_PATH/$DATE.tar.gpg

# Backup the latest 30 days
rm $BACKUP_TEMP_PATH/*
find $ARCHIVE_PATH -name "*.tar.gpg" -type f -mtime +30 -exec rm {} \;

# Sync to Google Drive
rclone sync $ARCHIVE_PATH gdrive:[sync path]

# Sync to Microsoft OneDrive
rclone sync $ARCHIVE_PATH onedrive:[sync path]

# Output log file
echo -e "\e[1;32m---------------------------------------------\e[0m" >> $ARCHIVE_LOG_FILE
echo -e "Backup date: "$(date +%Y-%m-%d)"\t""Finish time: "$(date +%H:%M:%S) >> $ARCHIVE_LOG_FILE
echo -e "\e[1;32m---------------------------------------------\e[0m\n" >> $ARCHIVE_LOG_FILE

Read More >

使用rsync同步文件

本地环境是Windows,一些数据都是使用Git同步Linux服务器上,但由于我修改文件的频率过高,用起来就很难受:( 经过一番探索后,决定使用rsync进行数据同步,运行原理见一位前辈的分析。使用下来感觉方便了不少,还可以通过脚本实现定时同步,定时备份,很实用的一个软件。

Read More >

用Docker整合SeafilePro搭建私人云盘

现在的网盘越来越辣鸡,倒不是说体验不好,天朝带宽这么贵的情况下,30一个月也还算划算(暗示),但天天扫描网盘上的文件就不能忍了😕,毕竟不是每个人都愿意用隐私换取便利(再次暗示),因此剁手购入大盘独服,自己搭建一个网盘使用。在平台的选择过程中最后纠结于Nextcloud和Seafile,都搭建体验之后最终选择了Seafile,比较PHP的文件管理性能略显拉跨。

Seafile是一款开源的企业云盘,注重可靠性和性能。支持Windows, Mac, Linux, iOS, Android多平台文件同步或者直接挂载到本地访问。专业版也免费支持最多三个用户,足以满足要求,顺便试一下用Docker部署,第一次使用Docker也遇到了一些坑,也作为记录。

Read More >