加油
努力

网站部署在服务器上,重装系统需要提前做哪些准备?

重装服务器系统是高风险操作,若准备不足可能导致网站长时间不可用、数据丢失或安全漏洞。以下是系统性、分步骤的必备准备工作清单,建议按顺序严格执行:


✅ 一、全面备份(核心!不可跳过)

类别 具体内容 推荐方式 验证要求
网站文件 HTML/CSS/JS、程序代码、上传目录(如 uploads/)、配置文件(.envconfig.php 等) rsynctar 打包 + 压缩,排除临时文件/缓存(如 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 verboseiptables -L -n -v,记录开放端口(80/443/22/3306等)及来源IP限制;
  • 📄 域名与DNS
    • A/AAAA 记录指向、CNAME 设置、CAA 记录、DNS TTL(建议重装前调低至 300s,提速切换);
  • 📄 SSL 证书信息
    • 证书颁发机构(Let’s Encrypt?商业证书?)、有效期、自动续期脚本位置(如 certbot renew --dry-run 测试);
  • 📄 监控与告警
    • 是否接入 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);
  • 🔄 回滚方案
    • 明确“重装失败”时的兜底动作(如:挂载旧系统盘启动、从备份快速恢复原系统)。

✅ 五、安全加固(重装后必做)

  • 🔐 删除默认账户(如 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服务器、数据库、网站类型等),我立刻为你生成专属方案。 🚀

云服务器