上线前夜又双叒叕翻车了?这份Checklist是我用三次回滚换来的

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 81 浏览 0 回复

上周六凌晨两点,我盯着刚上线的项目后台,用户反馈菜单点进去404,权限配置明明测过却漏了超级管理员,路由大小写问题导致Linux生产环境直接抛异常……回滚三次,咖啡喝了四杯,天亮才睡。今天把血泪教训整理成清单,各位站长上线前对着过一遍,能少熬不少夜。

一、权限:别只测"能进",要测"进不去"

本地Windows开发环境不区分大小写,我写的AuthController和路由里的auth相安无事。丢到Centos服务器上,中间件直接报类不存在。现在我的习惯是:上线前必须找一台Linux测试机,或者干脆用WSL2跑一遍全流程。

另外权限节点建议用"白名单+显式拒绝"双保险。上次图省事用了通配符,结果新加的敏感接口没配权限就暴露了。现在每个菜单、按钮、API接口都单独列在Excel里,上线前逐条核对。

二、路由:隐藏路由才是定时炸弹

ThinkPHP的route目录我一般会拆三个文件:admin.phpapi.phpweb.php。但最坑的是——有些控制器方法没配路由,通过默认解析也能访问!上线前我会执行php think route:list导出完整路由表,和预期接口做diff对比,多出来的、少掉的都要排查。

还有跨域配置,本地前后端分离用Vite代理没事,上线后CDN域名、OSS域名、主站域名三个来源,漏配一个用户就报CORS错误。现在我的做法是:把允许来源写进.env,不同环境读不同配置,绝不硬编码。

三、菜单:数据库结构和代码版本要对齐

这个坑我踩过两次。本地开发了新功能,菜单表新增了记录,上线时只更新了代码忘了导菜单SQL,或者导了SQL但权限节点字符串和代码里对不上。现在我的方案是:菜单初始化做成迁移文件(ThinkPHP用php think migrate:create),随代码版本一起提交,再也不用手动导SQL。

另外提醒一点:如果用了多语言,菜单名称的lang键值上线前要检查是否遗漏,否则用户切到英文版菜单直接显示raw key,丑到想哭。

四、配置:.env和生产环境谁说了算

最惨痛的一次,本地调试开了APP_DEBUG=true,上线时.env倒是改了,但OPcache没清,配置缓存还是旧的。页面报错直接把数据库密码甩给用户看。现在上线流程固定三步:改配置→清OPcache→php think optimize:route再跑一遍,缺一不可。

还有容易被忽略的:邮件SMTP、OSS内网/外网Endpoint、微信支付回调地址、短信模板ID。这些第三方配置我单独建了个config/third.php,上线前逐项telnet测试连通性,不连通不上线。

五、我的土味上线仪式

现在每次上线前,我会打印一张A4纸 checklist,逐项打钩。最后一步是打开浏览器的无痕模式,用普通用户账号完整走一遍核心流程。很多权限问题只有脱离开发者身份才能发现。

各位站长有什么上线翻车经历?或者清单里漏了哪条?欢迎补充,我更新到下一版里。

评论0
回复 · 0
还没有回复
微信客服 微信客服