1.
环境与前置准备
- 确认系统:推荐 Ubuntu 20.04 / 22.04 或 CentOS 7/8。
- 登录:用本地生成的 SSH 密钥对登录,禁止密码登录。示例:ssh-keygen && ssh-copy-id user@vps-ip。
- 更新系统:Ubuntu: sudo apt update && sudo apt upgrade -y;CentOS: sudo yum update -y。
- 防火墙:开通必要端口(SSH、Prometheus、Grafana、应用端口),示例:ufw allow 22/tcp && ufw allow 3000/tcp && ufw enable。
2.
基础安全加固
- 创建非 root 用户并赋 sudo:adduser deploy && usermod -aG sudo deploy。
- 禁用 root SSH:编辑 /etc/ssh/sshd_config,PermitRootLogin no,重启 sshd。
- 设置 Fail2ban:Ubuntu: sudo apt install fail2ban -y,启用 ssh 模块并修改 /etc/fail2ban/jail.local。
- 安装并配置自动更新或定期检查补丁。
3.
监控方案概览
- 使用 Prometheus + node_exporter + Grafana 进行主机与进程级监控。
- 日志可选 ELK/EFK 或轻量 Filebeat + Graylog;简单场景使用 rsyslog+logrotate。
- 告警通过 Alertmanager(Prometheus)与邮件/SMS/钉钉/Telegram 集成。
4.
部署 Node Exporter(主机指标)
- 下载并运行:wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-*.tar.gz && tar xzf ...。
- 创建 systemd 服务 /etc/systemd/system/node_exporter.service 内容:ExecStart=/usr/local/bin/node_exporter,启用并启动:sudo systemctl daemon-reload && sudo systemctl enable --now node_exporter。
- 验证:curl http://localhost:9100/metrics。
5.
部署 Prometheus(抓取指标)
- 下载并解压 Prometheus,编辑 prometheus.yml 添加 node_exporter 目标:
- job_name: 'node'\n static_configs:\n - targets: ['vps-ip:9100']。
- 以 systemd 方式运行 Prometheus。端口默认 9090,确保防火墙放行。
6.
部署 Grafana(可视化)
- 安装:Ubuntu: sudo apt install -y apt-transport-https && add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" && apt update && apt install grafana.
- 启动并开机:sudo systemctl enable --now grafana-server。
- 在 Grafana 中添加 Prometheus 数据源,导入常用主机监控面板(Community dashboards)。
7.
告警配置(Alertmanager)
- 在 Prometheus 中配置 alerting.rules(示例:node_cpu_seconds_total 持续高于90%)。
- 部署 Alertmanager,配置接收器(email/Slack/钉钉)。在 prometheus.yml 指定 alertmanager 地址并重载。
8.
文件与数据库备份策略
- 文件:使用 rsync + hardlink(rsnapshot 风格)或 borgbackup 进行增量压缩并加密。
- 数据库 MySQL/MariaDB:使用 mysqldump 导出,或使用 Percona XtraBackup 做物理热备份。示例:mysqldump -u root -p --single-transaction --routines --events --triggers dbname > /backup/db_$(date +%F).sql。
- 将备份同步到第三方对象存储(S3/Wasabi/Backblaze)或另一台海外服务器,防止单点故障。
9.
自动化备份实现示例
- 写脚本 /usr/local/bin/backup_daily.sh 内容:1) mysqldump,2) tar 压缩 /var/www,3) borg create 或 rclone copy 到 S3。
- 添加 cron:sudo crontab -e,加入:0 2 * * * /usr/local/bin/backup_daily.sh >> /var/log/backup.log 2>&1。
- 保留策略:daily 7 天,weekly 4 周,monthly 6 月,使用 borg prune 或 rclone lifecycle。
10.
恢复流程(演练)
- 文件恢复:从对象存储下载指定快照,解压并覆盖至目标目录,检查权限与 SELinux 标签。
- 数据库恢复:停止写入,导入 mysqldump 文件:mysql -u root -p dbname < db_YYYY-MM-DD.sql,验证数据完整性与应用连通。
- 快速回滚:保留最近快照并记录恢复步骤,演练每月一次,记录恢复时间与问题。
11.
日志与审计
- 开启 logrotate:为 /var/log/backup.log /var/log/prometheus.log 配置轮转与压缩。
- 将关键日志(备份成功/失败、告警触发)通过邮件/Webhook 通知运维值班。
- 建议保留操作审计(sudo logs、deploy 脚本历史)以便回溯问题。
12.
运维自动化与脚本示例
- 常用脚本:健康检查(curl 检查 HTTP 200)、磁盘占用报警(df -h + mail),示例脚本放 /opt/monitor/scripts 并用 systemd-timer 或 cron 调度。
- CI/CD:将备份脚本与监控配置放入版本库,变更走 Pull Request 流程,并在变更后执行 smoke tests。
13.
问:在柬埔寨VPS上部署监控需要注意什么?
- 答:注意网络带宽与延迟,选择抓取间隔(Prometheus scrape_interval)不要太短(默认15s可改为30s或60s),开放最小端口,使用私有网络或 VPN 连接多台主机以保证安全。
14.
问:如何保证备份的可信性与可用性?
- 答:通过定期恢复演练验证备份可用性;备份加密并存多地(对象存储+异地服务器);备份日志纳入监控并设置失败告警,确保备份脚本有返回码并记录详细日志。
15.
问:出现数据损坏时,最快的恢复路径是什么?
- 答:优先从最近的完整快照恢复文件,再按时间点恢复数据库(若使用 binlog,可做点-in-time 恢复);事前准备好恢复 SOP(步骤、命令、联系方式),并在非高峰期演练以估算 RTO/RPO。
来源:运维实战柬埔寨vps 免备案环境监控与备份恢复方案分享