一、审计阶段:拿到代码第一件事不是部署,是审
① 目录结构扫描
先不跑代码,先看目录。
一个项目的目录结构能直接反映架构水平。
核心判断标准:业务逻辑是否和框架代码分离。
如果控制器里嵌着数据库连接、模板里写着业务判断,这个项目后续改造成本会非常高。
② 依赖清单核对
把 composer.json 或 package.json 拉出来,逐项核对版本号和许可证。
踩过的坑:有一次部署到一半,发现一个关键依赖库的版本和PHP环境不兼容,回退重装浪费了大半天。从那之后,依赖核对放在第一步。
③ 硬编码扫描
全项目搜索 IP 地址、域名、绝对路径、密钥。
这些东西绝对不能硬编码在代码里。找到了,全部抽到环境变量。
核心原则:代码和环境分离。同一份代码,换个环境改配置就能跑,不用改代码。
二、环境搭建:和审计同步进行
审计和搭环境可以并行。
运行环境选型
技术栈选型上,我倾向用经过大规模生产验证的成熟方案。
不做第一个吃螃蟹的人。
核心原则:选最稳的,不选最新的。生产环境不是实验场。
环境隔离
开发环境、测试环境、生产环境,三套完全独立。
数据库不能共用,配置文件不能复用,连服务器账号都分开。
踩过的坑:早期图省事,测试环境和生产环境共用一台服务器。有次测试时一个死循环把CPU打满,生产环境跟着挂了。
三、配置检查:最容易出事的环节
代码没问题,环境没问题,一跑就报错——十有八九是配置。
检查清单
| 检查项 | 常见问题 |
|---|---|
| 数据库连接 | 字符集不一致导致乱码 |
| 缓存配置 | 未设密码或使用默认端口 |
| 文件权限 | 上传目录不可写 |
| 定时任务 | 路径硬编码,换环境失效 |
| 日志路径 | 目录不存在,报错日志也丢了 |
| 第三方密钥 | 测试环境密钥混入生产 |
每一项都要手动验证一遍。自动化脚本能查语法,查不了逻辑。
四、数据迁移:最容易被低估的一步
结构迁移 vs 数据迁移
结构迁移用迁移工具,问题不大。
真正麻烦的是数据迁移。
踩过的坑:旧系统用户ID是自增数字,新系统用户ID是UUID。直接导入后,所有关联表全乱。最后写了一个映射脚本,跑了两天才对齐。
迁移原则
- 先迁结构,再迁数据
- 先迁基础数据,再迁业务数据
- 每迁一张表,验证一张表
- 保留原始备份,至少保留七天
核心原则:宁可慢,不能错。数据一旦污染,修复成本是指数级的。
五、安全加固:上线前的最后一道防线
服务端加固
- 关闭不必要的端口和服务
- 数据库不对外开放端口
- SSH 禁用密码登录,只用密钥
- 设置访问频率限制
- 开启 HTTPS,证书自动续期
应用层加固
- SQL 注入防护
- XSS 过滤
- 文件上传类型白名单
- 接口鉴权全覆盖
- 敏感数据加密存储
核心原则:安全不做加法,做减法。只开放必须开放的,其他全关掉。
六、灰度上线:不要一把梭
灰度策略
先切 10% 流量观察半小时。
日志正常、错误率无波动、响应时间无异常——扩到 50%。
再观察一小时,一切正常——全量切。
踩过的坑:有次觉得改动不大,直接全量上线。一个配置文件忘改,全站报错三分钟。从那之后,再小的改动也走灰度。
回滚预案
每次上线前,准备好回滚方案。
不是"大概知道怎么回滚",是写好回滚脚本、验证过、放在手边。
核心原则:上线不赌,灰度验证;出事不怕,一键回滚。
最后
这篇文章写的不是理论框架,是我实际帮人部署项目跑出来的经验。
从审计到上线,六个环节每一步都有坑。我踩过的,你不用再踩一遍。
如果你也在做项目部署,或者在选型阶段需要判断一套方案部署成本高不高——这些经验应该能帮你少走弯路。
个人技术经验分享,具体操作请结合项目实际情况评估