twikoo
twikoo copied to clipboard
建议:定时备份,写给需要的朋友
问题背景
最近我在十年之约大群中,不少群友博客被刷评论,少则几百条多则上千条,应该是用了什么脚本,且都是typecho驱动
解决办法
通过作者完善评论系统是肯定无法实现的,文件需要我们自己去备份
我第一次建站,毫无经验,所以从未考虑过备份评论,提供两种备份方案,写给和我一样的小白站长
宝塔可以直接对站点备份,但评论备份无法实现,服务器自带python环境,所以我做了一个python代码,利用crontab -e
或宝塔面板中的计划任务定时备份,在目录下backuplog.txt会记录每一次备份日志
Vercel部署备份方案
下载MongoDB工具,放到服务器里解压
Vercel部署,将代码存放在MongoDB 数据库工具同级路径下,按需修改30行(清理备份,delete_day)、35行(Vercel部署中的MONGODB_URI去掉问号之后的东西)
import os
from datetime import datetime
import sys
class Logger ( object ):
def __init__(self, fileN="Default.log"):
self.terminal = sys.stdout
self.log = open ( fileN, "a" )
def write(self, message):
self.terminal.write ( message )
self.log.write ( message )
def flush(self):
pass
sys.stdout = Logger ( "backuplog.txt" ) # 输出日志
print ( "--------------------------------------------------------------\n" )
now_time = datetime.now () # 当前时间
now_time_day = now_time.day # 日
data = f"{now_time.year}年{now_time.month}月{now_time.day}日"
delete_day = [ 15, 30 ] # 每月15、30号清空备份
if now_time_day in delete_day:
os.system ( 'rm *.json -f' ) # 删除所有json
print ( data + " 清空备份文件" )
# os.system ( 'rm backuplog.txt.txt -f' ) # 删除日志
MONGODB_URI = 'mongodb+srv://xxx:xxx@xxxxxxx/myFirstDatabase'
commond = 'mongoexport --uri ' + f'{MONGODB_URI}' + ' --collection comment --forceTableScan --type json --out ' + f"{now_time.year}年{now_time.month}月{now_time.day}日.json"
code = os.system ( commond )
if code == 0:
print ( data + " 备份成功" )
else:
print ( data + " 备份失败,请检查python文件中MONGODB_URI值是否正确" )
print ()
# Vercel部署日志文件示例
--------------------------------------------------------------
2022年8月8日 备份失败,请检查python文件中MONGODB_URI值是否正确
--------------------------------------------------------------
2022年8月8日 备份成功
私有部署备份方案
私有部署,代码存放位置任意,修改30行(清理备份delete_day)、35行(原始路径init_path)、36行(备份路径backup_path),都用绝对路径,但不要在相同路径下,因为定时清理会清掉所有json文件
import os
from datetime import datetime
import sys
class Logger ( object ):
def __init__(self, fileN="Default.log"):
self.terminal = sys.stdout
self.log = open ( fileN, "a" )
def write(self, message):
self.terminal.write ( message )
self.log.write ( message )
def flush(self):
pass
sys.stdout = Logger ( "backuplog.txt" ) # 输出日志
print ( "--------------------------------------------------------------\n" )
now_time = datetime.now () # 当前时间
now_time_day = now_time.day # 日
data = f"{now_time.year}年{now_time.month}月{now_time.day}日"
delete_day = [ 15, 30 ] # 每月15、30号清空备份
if now_time_day in delete_day:
os.system ( 'rm *.json -f' ) # 删除所有json
print ( data + " 清空备份文件" )
# os.system ( 'rm backuplog.txt.txt -f' ) # 删除日志
init_path='/xxxxx/bin/db.json.1'
backup_path='/xxxxx/bin/backup/'
init_path='"'+init_path+'"'
backup_path='"'+backup_path+f"/{now_time.year}年{now_time.month}月{now_time.day}日.json"+'"'
commond = 'cp '+init_path+" "+backup_path
code = os.system ( commond )
if code == 0:
print ( data + " 备份成功" )
else:
print ( data + " 备份失败,请检查python文件中init_path和backup_path是否正确或备份路径是否有读写权限" )
print ()
# 私有部署日志文件示例
--------------------------------------------------------------
2022年8月8日 备份成功
--------------------------------------------------------------
2022年8月8日 备份失败,请检查python文件中init_path和backup_path是否正确或备份路径是否有读写权限
定时运行
立即导出可以在shell
窗口中运行python3 文件名
定时运行方法很多,以宝塔计划任务为例,定时Shell脚本示例,cd后跟py文件的绝对路径
cd /xxx/twikoo/mongodb/bin
python3 backup.py
附我的仓库,仓库里代码可以显示行数,方便一些
额外建议
额外建议,因为我对JavaScript不熟悉,不知道技术上能否实现。通过第三方验证网站添加验证码(其实有点鸡肋,想刷的人还是会手动刷),或者像typecho前面那张图片一样,在后台审核中可以一键删除未审核的评论