重装服务器系统是高风险操作,若准备不足可能导致网站长时间不可用、数据丢失或安全漏洞。以下是系统性、分步骤的必备准备工作清单,建议按顺序严格执行:
✅ 一、全面备份(核心!不可跳过)
| 类别 | 具体内容 | 推荐方式 | 验证要求 |
|---|---|---|---|
| 网站文件 | HTML/CSS/JS、程序代码、上传目录(如 uploads/)、配置文件(.env、config.php 等) |
rsync 或 tar 打包 + 压缩,排除临时文件/缓存(如 cache/, logs/, .git) |
✅ 在另一台机器解压并校验 md5/sha256 |
| 数据库 | MySQL/MariaDB/PostgreSQL 全库或关键库(含用户权限、存储过程等) | mysqldump --all-databases --single-transaction --routines --triggers --events > backup.sql(MySQL)或 pg_dumpall -c > backup.sql(PostgreSQL) |
✅ 本地导入测试库,检查表结构+数据完整性 |
| Web 服务器配置 | Nginx/Apache 虚拟主机配置、SSL 证书(fullchain.pem + privkey.pem)、重写规则 |
备份 /etc/nginx/sites-enabled/、/etc/apache2/sites-available/ 及 SSL 证书路径 |
✅ 比对配置文件 MD5,确认证书未过期 |
| 运行环境配置 | PHP 版本及扩展(php.ini)、Python 环境(requirements.txt)、Node.js 版本、环境变量 |
记录 php -v, php -m, python3 -m pip list, node -v, npm list -g;备份关键配置文件 |
✅ 生成环境快照脚本(见下方工具推荐) |
| 其他关键数据 | Redis/Memcached 数据(如有持久化)、邮件队列、自定义守护进程(Supervisor/Systemd)配置 | Redis:确保 save 配置已启用,备份 dump.rdb;Supervisor:备份 /etc/supervisor/conf.d/*.conf |
✅ Redis 加载 dump 文件验证;Supervisor 配置语法检查 |
⚠️ 重要原则:
- 备份必须离线存储(如另一台服务器、NAS、加密U盘),禁止仅存于本机;
- 所有备份文件需加时间戳命名(例:
backup_20240520_nginx_conf.tar.gz);- 执行一次恢复演练(哪怕只在测试机),这是唯一验证备份有效性的方法。
✅ 二、文档与清单整理(避免遗漏)
- 📄 服务依赖清单:
- Web 服务(Nginx/Apache)、数据库(MySQL/PostgreSQL)、缓存(Redis)、消息队列(RabbitMQ)、反向X_X(Cloudflare?)、CDN 配置;
- 📄 端口与防火墙规则:
sudo ufw status verbose或iptables -L -n -v,记录开放端口(80/443/22/3306等)及来源IP限制;
- 📄 域名与DNS:
- A/AAAA 记录指向、CNAME 设置、CAA 记录、DNS TTL(建议重装前调低至 300s,提速切换);
- 📄 SSL 证书信息:
- 证书颁发机构(Let’s Encrypt?商业证书?)、有效期、自动续期脚本位置(如
certbot renew --dry-run测试);
- 证书颁发机构(Let’s Encrypt?商业证书?)、有效期、自动续期脚本位置(如
- 📄 监控与告警:
- 是否接入 Prometheus/Grafana?Zabbix?是否配置了宕机通知(邮件/微信/钉钉)?记录告警联系人。
✅ 三、部署流程标准化(防人为失误)
- ✅ 编写重装后一键部署脚本(示例):
# deploy_after_reinstall.sh apt update && apt upgrade -y apt install nginx mysql-server php-fpm php-mysql ... -y cp /backup/www/* /var/www/html/ mysql < /backup/db/production.sql cp /backup/nginx/conf.d/site.conf /etc/nginx/conf.d/ systemctl restart nginx mysql php7.4-fpm certbot --nginx -d example.com # 自动续签 - ✅ 使用配置管理工具(进阶推荐):
- Ansible Playbook(轻量)、Docker Compose(容器化)、Terraform(云环境)——实现“基础设施即代码”。
✅ 四、业务与用户影响控制
- 🕒 选择维护窗口:避开业务高峰(如国内选工作日 02:00–04:00);
- 📢 提前通知:
- 网站添加维护页面(503 Service Temporarily Unavailable);
- 邮件/站内信告知用户维护时段(含预计恢复时间);
- 🌐 DNS 切换预案:
- 若旧IP将失效,提前将 DNS TTL 设为 300s,重装后立即更新A记录,并监控全球解析生效(用
dig example.com @8.8.8.8);
- 若旧IP将失效,提前将 DNS TTL 设为 300s,重装后立即更新A记录,并监控全球解析生效(用
- 🔄 回滚方案:
- 明确“重装失败”时的兜底动作(如:挂载旧系统盘启动、从备份快速恢复原系统)。
✅ 五、安全加固(重装后必做)
- 🔐 删除默认账户(如 MySQL 的
root@localhost无密码); - 🔐 SSH 强制密钥登录,禁用密码登录(
/etc/ssh/sshd_config:PasswordAuthentication no); - 🔐 更新所有软件源(
apt update && apt upgrade -y/yum update -y); - 🔐 配置防火墙(UFW/iptables)仅开放必要端口;
- 🔐 为数据库、Redis 设置强密码并绑定
127.0.0.1(禁止公网访问)。
🛠 工具推荐(提升效率与可靠性)
- 备份校验:
md5sum backup.tar.gz+sha256sum backup.tar.gz - 环境快照:
dpkg --get-selections > packages.list(Debian/Ubuntu) - SSL 检查:
openssl x509 -in cert.pem -text -noout | grep "Not After" - DNS 生效检测:https://dnschecker.org/
- 一键诊断脚本:
# check_server_ready.sh echo "=== 网络 ==="; ping -c 2 google.com echo "=== 端口 ==="; ss -tuln | grep ':80|:443|:22' echo "=== 服务 ==="; systemctl is-active nginx mysql
❗ 最后提醒(血泪经验)
▪️ 不要在生产环境直接重装! 先在相同配置的测试服务器完整走一遍流程;
▪️ 重装前务必关闭所有正在运行的服务(systemctl stop nginx mysql php7.4-fpm),避免文件被占用导致备份不一致;
▪️ 证书私钥(privkey.pem)必须严格保密,切勿上传到 GitHub 或明文传输;
▪️ 重装后第一件事:访问网站首页 + 登录后台 + 提交表单测试全流程!
如需,我可为你:
- ✨ 定制一份 针对你当前环境(如:Ubuntu 22.04 + Nginx + MySQL 8 + WordPress)的详细重装Checklist;
- ✨ 提供 自动化备份脚本(含压缩、加密、异地同步);
- ✨ 编写 Ansible Playbook 实现全自动部署。
请告诉我你的服务器环境(OS版本、Web服务器、数据库、网站类型等),我立刻为你生成专属方案。 🚀
云小栈