1.
选型与部署前准备
- 选择台湾机房的VPS供应商(例如:Gandi、Vultr(台北节点)、Linode台北或本地托管商),优先考虑网络到目标用户延迟与带宽、快照支持、API 管理能力。
- 建议配置:至少2核、4GB内存、40GB SSD(生产小型服务),并预留快照费用和一个异地备份目标(另一地域或对象存储)。
2.
系统安装与基础更新
- 建议使用 Debian 或 Ubuntu LTS。登录后立即更新:
apt update && apt upgrade -y
- 设置时区:timedatectl set-timezone Asia/Taipei
- 创建非root账户并启用 sudo:
adduser deployer && usermod -aG sudo deployer
- 配置SSH公钥登录:在本地ssh-keygen生成key后,将~/.ssh/authorized_keys放入/home/deployer/.ssh/并chmod 600/700。
3.
SSH与安全加固
- 禁用密码登录、禁用root远程登录:编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no 与 PasswordAuthentication no,然后 systemctl restart sshd。
- 更换默认SSH端口(可选)并在防火墙放行新端口。
4.
防火墙与入侵防护
- 使用ufw快速配置:
apt install ufw -y
ufw default deny incoming; ufw default allow outgoing
ufw allow 22/tcp (或自定义端口), ufw allow 80, ufw allow 443; ufw enable
- 安装 fail2ban:apt install fail2ban -y,启用常用 jail(sshd/nginx),必要时自定义 /etc/fail2ban/jail.local。
5.
监控与告警基础
- 部署轻量监控:安装 Netdata(实时图表):bash <(curl -Ss https://my-netdata.io/kickstart.sh)。
- 生产级建议:Prometheus node_exporter + Alertmanager 或使用第三方如 Datadog、UptimeRobot,确保有告警短信/邮箱渠道。
6.
备份策略总览
- 采用3-2-1原则:至少3份副本、至少2种不同介质、1份异地。
- 区分备份类型:文件(/var/www、配置文件)、数据库(MySQL/Postgres)、快照(完整卷)。备份频率:文件每日或实时增量,数据库每日完全 + 每小时二进制日志保留。
7.
数据库备份实操(MySQL示例)
- 安装并创建备份脚本 /usr/local/bin/mysql_backup.sh:
#!/bin/bash
OUTDIR=/root/backups/mysql/$(date +%F)
mkdir -p $OUTDIR
mysqldump -ubackupuser -p'备份密码' --single-transaction --routines --events --databases db1 db2 > $OUTDIR/all.sql
tar -czf $OUTDIR/all.sql.tgz -C $OUTDIR all.sql && rm $OUTDIR/all.sql
- 设置定时任务:crontab -e 添加 0 2 * * * /usr/local/bin/mysql_backup.sh >/dev/null 2>&1(每天凌晨2点)。
8.
文件与静态内容备份(rsync 实例)
- 使用 rsync 到本地挂载盘或远端备份服务器:
rsync -az --delete --link-dest=/backup/latest /var/www/ backupuser@backup.example.com:/data/www/$(date +%F)/
- 推荐使用 --link-dest 与硬链接实现增量快照(节省空间)。
9.
安全与高效的增量备份工具:Restic/Borg
- 推荐 Restic(支持S3兼容远端、加密、校验):安装并初始化:
apt install restic -y
export RESTIC_REPOSITORY="s3:s3.wasabisys.com/bucket-name:region"
export AWS_ACCESS_KEY_ID=xxx; export AWS_SECRET_ACCESS_KEY=yyy
restic init
- 备份命令示例:restic backup /var/www /etc /root/backups/mysql --tag production
- 定期回收旧备份:restic forget --keep-daily 7 --keep-weekly 4 --prune
10.
对象存储与rclone同步
- 若使用 S3/Wasabi/Backblaze,可用 rclone 上传大文件或同步快照:
rclone config(交互配置 remote)
rclone sync /root/backups remote:bucket/backups/taiwan-vps --transfers=4 --checksum
- 将 rclone 同步作为 cron job 或 systemd timer。
11.
快照与云端卷(快速恢复)
- 使用云商快照(停止或在线快照)作为整机恢复手段。操作示例:通过供应商控制台创建快照,或使用 API:
curl -X POST "https://api.provider/v1/instances/{id}/snapshot" -H "Authorization: Bearer TOKEN"。
- 快照并非替代备份,应与数据一致性脚本(先 flush DB)配合。
12.
恢复演练与校验
- 恢复演练步骤:从备份仓库恢复到临时实例,验证服务可用、数据库完整、文件权限正确。
- Restic 检查:restic check;MySQL 恢复示例:mysql -u root -p newdb < all.sql。
13.
自动化与报警集成
- 将备份脚本输出写日志并在失败时发送邮件或Webhook。示例 systemd service + timer 或 crontab 将 stderr 输出到日志并触发 curl https://hooks.example.com/backup-failed。
- 集成 Prometheus exporter 或自定义健康检查上报到监控系统,若备份超过阈值触发告警。
14.
权限、加密与密钥管理
- 备份加密:Restic 自带加密;若使用 rsync+tar,请使用 gpg 加密:gpg --symmetric --cipher-algo AES256 backup.tgz。
- 密钥管理:将密钥保存在安全的 KMS 或离线机密管理器,定期轮换并记录恢复流程。
15.
运维流程建议与SOP模板
- 建议SOP包含:故障检测 -> 快速切换到备份实例 -> 数据恢复 -> DNS切换流程 -> 回溯与复盘。
- 每次改动(系统升级、架构变更)记录变更单并做一次备份和恢复演练以验证备份一致性。
16.
问:台湾VPS延迟与异地备份如何平衡?
- 答:建议将主节点放在台湾以降低用户延迟,备份目标放在不同地理区(例如香港、新加坡或大陆外的S3兼容对象存储)。采用增量备份(restic/rsync)减少带宽负担,并在非高峰时段(例如凌晨)执行大型数据传输;同时使用差异/增量快照与压缩减少流量。
17.
问:如何保证数据库备份的一致性?
- 答:对MySQL使用 --single-transaction 结合事务引擎InnoDB实现一致性热备;对需要完全一致性的场景,可先执行 FLUSH TABLES WITH READ LOCK 导出binlog位置后再解锁;备份后务必记录备份对应的binlog位置用于点位恢复。
18.
问:发生整机故障时最佳恢复步骤是什么?
- 答:先启动预配置的备用实例或快速从快照恢复实例,更新应用配置指向新实例,恢复数据库(从最近有效备份),同步最近增量(binlog或增量备份),完成后切换负载/DNS并监测服务状态。恢复过程须在SOP中明确时间窗与人员分工。
来源:长期稳定运行案例推荐台湾vps运维与备份方案解析