1.
准备阶段:列清单与权限确认
- 清单:列出域名、测试环境IP、目标香港VPS IP/账号(root或sudo用户)、数据库信息、依赖服务(Redis、ElasticSearch等)。
- 权限:确保有目标VPS的SSH密钥或密码、DNS管理权限、证书管理权限(Let's Encrypt或商业证书)。
- 版本控制:确认代码在Git(或其他)上有明确tag或release,用于回滚。
2.
环境与配置对齐(测试与生产一致性)
- OS与软件:记录测试与生产的操作系统版本、Nginx/Apache、PHP/Node/Docker版本,尽量保持一致。
- 配置文件:将config(不含敏感信息)模板化(env.example),采用环境变量或配置管理工具(Ansible、Chef)。
- 包管理:在目标VPS上使用相同包管理命令(apt/yum)安装依赖并记录版本,或使用Docker容器保证一致性。
3.
备份策略:全量与增量备份
- 文件备份:在测试环境运行rsync --archive --verbose --delete /path/to/site/ user@hk-vps:/var/www/site/ 前先保留本地快照。
- 数据库备份:MySQL:mysqldump -u root -p --databases dbname > dbname.sql;Postgres:pg_dump -U user -F c dbname > dbname.dump。
- 验证备份:将备份文件还原到临时数据库或目录,确认可用(例如mysql -u root -p dbname < dbname.sql)。
4.
同步静态文件与代码发布
- 使用rsync:rsync -avz --delete --exclude='.git' ./dist/ user@hk-vps:/var/www/site/,--delete确保生产同步一致。
- Git部署:可在目标VPS上使用git clone && git checkout
,或使用webhook触发git pull并重建。
- 构建步骤:若有前端构建(npm run build),建议在CI上构建产物后只同步静态文件到VPS,减少服务器上的构建依赖。
5.
数据库迁移与数据同步
- 全量导出:在低峰时间做一次全量导出并导入到生产数据库(参照第3条命令)。
- 增量/实时:若需要零停机,可在源库设置binlog复制或使用工具(pt-table-sync、gh-ost、Flyway)做增量同步。
- 验证:对比行数、重要表的sum(md5(column))或使用应用层校验接口,确认数据一致性。
6.
配置与安全:防火墙、用户、证书
- SSH安全:使用非默认端口、禁用root直接登录(PermitRootLogin no),配置公钥认证。
- 防火墙:配置ufw或iptables,只开放必需端口(80/443/22/其它)。例如ufw allow 80/tcp && ufw allow 443/tcp。
- SSL证书:在目标VPS用certbot获取证书(certbot --nginx -d example.com),或上传商业证书并配置Nginx/Apache。
7.
DNS切换策略与TTL优化
- 预降TTL:上线前48小时把目标域名TTL降为60-120秒(在DNS控制台),以便快速生效。
- 灰度/蓝绿:采用蓝绿部署:在生产切换之前,部署新环境并在内部或子域测试,确认后将域名A记录从旧IP切到新IP。
- 检查生效:使用dig +short example.com 或 nslookup 命令验证DNS解析到目标IP。
8.
上线前验证清单(Smoke Tests)
- 基本检查:访问首页、登录、支付/表单提交等核心流程是否正常。
- 日志监控:tail -f /var/log/nginx/error.log 和 应用日志,确认无致命错误。
- 性能:使用ab或wrk做小流量压力测试,确认响应时间在可接受范围内(参考QPS/latency目标)。
9.
部署自动化与回滚方案
- 自动化工具:推荐使用Ansible脚本或Docker Compose/Swarm、Kubernetes去复现部署步骤,避免人工失误。
- 回滚:保持旧环境运行至少短时间作为回滚目标,或在DNS切换后监控若出现严重问题,立即把A记录切回旧IP并恢复TTL。
- 记录:每次部署记录变更日志(change log)、时间和操作人员,便于事后追溯。
10.
监控、告警与性能优化
- 监控部署:安装监控(Prometheus+Grafana、Zabbix或第三方如Datadog),监控CPU、内存、磁盘、响应时间。
- 告警:设置关键阈值(响应时间>500ms、错误率>1%)并配置Slack/邮件告警。
- 优化:根据监控数据做缓存(Redis、CDN)、Nginx配置优化(keepalive、worker_processes)等。
11.
验收与交付文档
- 验收清单:列出已完成项(备份、DNS切换、SSL生效、主要功能通过测试、监控就绪)。
- 文档交付:包括回滚步骤、访问凭证(安全传递)、维护手册与常见问题(FAQ)。
- 运营建议:在上线初期安排值班(24-72小时)以便快速响应突发问题。
12.
常见问题Q&A 1
问:如何做到零停机切换到香港VPS?
答:采用蓝绿或灰度部署,提前在新VPS完整部署并测试,降低DNS TTL至60秒,短时间内切换A记录;若使用负载均衡,可先将流量逐步从旧后端迁移到新后端,并观察错误率,出现问题可快速回退。
13.
常见问题Q&A 2
问:数据库迁移时如何保证数据不丢失且一致?
答:先做一次全量导出导入,再通过binlog复制或使用PT工具做增量同步;迁移窗口内将写入切换到目标库或启用双写策略并在最终切换前做一致性校验,确认无误后停止旧库服务。
14.
常见问题Q&A 3
问:上线后发现访问速度慢,常见排查步骤是什么?
答:先查看监控(CPU/内存/IO/网络),确认是否资源瓶颈;检查Nginx与后端响应时间、数据库慢查询、是否缺少缓存(Redis/页面缓存)、以及是否存在高并发下的网络丢包,依据定位逐项优化或扩容。
来源:迁移与上线流程 香港vps建站 从测试到生产的全流程清单