1. 环境准备与安全基线
- 在韩国VPS上创建独立管理账号:ssh 登录后 sudo adduser deploy,禁用root远程登录,编辑 /etc/ssh/sshd_config PermitRootLogin no。
- 安装必要组件:sudo apt update && sudo apt install -y nginx docker-compose certbot fail2ban rsync borgbackup mysql-client。
- 配置防火墙:ufw 默认拒绝,允许 22/80/443 与必要端口,sudo ufw allow 22/tcp; sudo ufw allow 'Nginx Full'; sudo ufw enable。
2. 多站点目录与权限策略
- 目录规划:/srv/sites/site1 /srv/sites/site2,每站点独立用户组:sudo groupadd site1 && sudo usermod -aG site1 www-data。
- 权限设置:chown -R deploy:site1 /srv/sites/site1; chmod -R 750 /srv/sites/site1。这样防止站点间文件相互读取。
3. Nginx 多站点配置(实际示例)
- 在 /etc/nginx/sites-available/ 为每站点建文件,例如 site1.conf:server_name site1.example.com; root /srv/sites/site1/current; index index.php index.html; 配置 fastcgi_pass 到 php-fpm socket。
- 启用并测试:sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/; sudo nginx -t && sudo systemctl reload nginx。
4. 使用 Docker 或 php-fpm 池隔离站点
- 推荐 Docker Compose 每站点独立容器:在 /srv/sites/site1/docker-compose.yml 定义 nginx+php-fpm+mysql(或外部DB) 服务。
- 启动:cd /srv/sites/site1 && docker-compose up -d;好处:进程隔离、便于迁移和快照。
5. 数据库管理与多站点模式
- 每站点独立数据库/用户:在 MySQL 中 CREATE DATABASE site1_db; CREATE USER 'site1'@'localhost' IDENTIFIED BY '强密码'; GRANT ALL ON site1_db.* TO 'site1'@'localhost';。
- 若使用单实例多站点表前缀,务必严格备份并测试恢复单站点数据。
6. 备份总体策略(3-2-1 原则)
- 保留至少3 份备份、使用2种不同介质、1份异地。
- 本地快照(LVM 或 Docker volume snapshot)+ 远程同步到另一台韩国或境外 VPS(rsync/ssh)+ 云端或本地加密存档(Borg/duplicity)。
7. 具体备份实现步骤(文件与数据库)
- 文件备份:sudo rsync -aAX --delete --link-dest=/backup/weekly /srv/sites/site1/ /backup/daily/site1/;定期合并或用 borg create --compression lz4 /backup/borg::site1-$(date +%F) /srv/sites/site1。
- 数据库备份:mysqldump -u root -p'密码' --single-transaction --quick --routines site1_db | gzip > /backup/daily/site1_db_$(date +%F).sql.gz。将这些文件加入 borg 或 rsync 同步。
8. 自动化与调度(Cron/Systemd Timer)
- 编写脚本 /usr/local/bin/backup_site1.sh,包含停止写入(可短暂停写或启用维护模式)、执行 mysqldump、同步文件与创建 borg 快照、并启用日志与返回码检查。
- 使用 crontab -e 添加计划:0 2 * * * /usr/local/bin/backup_site1.sh >> /var/log/backup_site1.log 2>&1。建议使用 systemd timer 更可靠。
9. 备份验证与恢复演练
- 定期验证:每周从备份恢复到隔离测试目录或测试服务器,步骤:1) 从 borg extract 恢复文件;2) gunzip < dump.sql.gz | mysql -u user -p dbname;3) 启动网站并检查页面与日志。
- 验证校验:备份后生成 SHA256 校验并比对,保证未损坏。
10. 灾难恢复(具体恢复步骤)
- 恢复文件:若主站崩溃,先在新 VPS 创建目标目录,使用 borg extract 或 rsync --archive 从远端备份拉取 /srv/sites/site1。
- 恢复数据库:停止应用连接,gunzip < /backup/site1_db.sql.gz | mysql -u root -p site1_db;调整配置文件的数据库连接与权限,重启 php-fpm/nginx。
- 验证并清理缓存:清空站点缓存、重启服务,检查 error.log 与 access.log。
11. 监控、告警与安全维护
- 部署监控:Prometheus + node_exporter 或 Zabbix,设置磁盘/CPU/服务不可用告警。
- 恶意访问防护:启用 fail2ban 与 nginx rate-limiting,确保定期更新系统补丁与证书自动续期(certbot renew)。
12. 版本控制与配置管理
- 将站点代码与配置(不含敏感凭证)放入 Git,CI/CD 使用 GitHub Actions 或 GitLab CI 自动构建镜像并部署到目标容器;敏感信息用 Vault 或环境变量管理。
13. 迁移建议与跨站点复制
- 若需在多台
韩国VPS负载均衡,使用 rsync + keepalived 做浮动IP 或 nginx upstream 配合健康检查。
- 数据库读写分离:主库写、从库读,备份主库并对从库做只读备份以降低影响。
Q1: 如何快速验证备份是否可用?
答:每周在隔离测试服务器上做一次完整恢复演练:从远程备份提取文件、恢复数据库到测试实例、启动服务并访问关键页面,同时比较校验和和应用日志,确保备份能用于真实恢复。
Q2: 如果单个站点数据损坏,我如何只恢复该站点?
答:使用按站点分离的备份策略(每站点独立 borg 仓库或独立 rsync 目录),直接提取该站点的 borg 快照或 rsync 目标,并只恢复对应数据库(mysqldump 单库恢复),无需影响其它站点。
Q3: 在韩国私人VPS上有什么合规或注意事项?
答:注意版权法规与托管服务条款,确保不托管侵权内容;同时遵守当地数据保护要求,敏感信息加密存储并限制访问,定期更新系统与证书以降低被滥用风险。
来源:韩国私人vps漫画网站 多站点管理与备份恢复的最佳实践