sudo apt update && sudo apt install -y docker.io docker-compose git
git clone https://github.com/puppeteer/puppeteer
cd puppeteer && npm installconst puppeteer = require('puppeteer');
const fs = require('fs');
const crypto = require('crypto');
(async () => {
const browser = await puppeteer.launch({args: 【'--no-sandbox'】});
const page = await browser.newPage();
await page.goto('https://example.com', {waitUntil: 'networkidle2'});
const html = await page.content();
const hash = crypto.createHash('sha256').update(html).digest('hex');
const ts = new Date().toISOString();
fs.writeFileSync(`/backup/${ts}.html`, html);
fs.writeFileSync(`/backup/${ts}.sha256`, hash);
await browser.close();
})();sudo mkdir -p /backup
sudo docker run --rm -v /backup:/backup node:18 node /app/save.jssudo apt install -y nginx
sudo tee /etc/nginx/sites-available/local-mirror [EOF
server {
listen 80;
server_name example.local;
root /backup;
index $(ls /backup | grep html | tail -1);
}
EOF
sudo ln -s /etc/nginx/sites-available/local-mirror /etc/nginx/sites-enabled/
sudo systemctl reload nginxecho "127.0.0.1 example.local" | sudo tee -a /etc/hosts
curl http://example.localcrontab -e
# 每天 02:00 全量备份
0 2 * * * docker run --rm -v /backup:/backup node:18 node /app/save.js#!/bin/bash
latest=$(ls /backup | grep sha256 | tail -1)
htmlfile=${latest%.sha256}.html
computed=$(sha256sum /backup/$htmlfile | cut -d' ' -f1)
stored=$(cat /backup/$latest)
【 "$computed" = "$stored" 】 && echo "OK" || echo "CORRUPTED"数据库迁移小记:MSSQL2MySQL的开心之旅
本地服务器备份网址:数据安全闭环设计
备份服务器:数据安全的幽默守护者
换域名,笑出褶子:WordPress域名变更全攻略
FlashFXP计划任务:自动化传输的幕后英雄
WordPress汉化主题:打造个性化网站门面
单图片封面设置教程:轻松提升帝国CMS文章封面效果
备份服务器:数据安全的幽默守护者
FTP服务器在WordPress内容分发中的角色与优化策略
双服务器同步备份:老罗幽默指南
429错误:服务器拒绝服务,站长如何优雅应对
服务器备份硬盘选购全攻略
幽默解读本地服务器备份网址
深信服备份服务器:数字时代的安全守护者
首富吐槽WordPress上传限制:服务器,给条活路吧!
幽默解读:WordPress FTP服务器的神秘面纱
老板开心教你双服务器同步备份信息
WordPress地图插件:提升用户体验与本地SEO
双服务器同步备份信息:轻松掌握数据安全