如何将基于Laravel 5.5的遗留OctoberCMS项目逐步迁移至纯Laravel 8
OctoberCMS 迁移至原生 Laravel 8 实操建议
我团队2021年完成过两次同场景迁移,其中一个项目就是基于Laravel 5.5内核的OctoberCMS v1.0迁到Laravel 8,上线至今运行稳定,以下是可直接落地的实操方案:
前置核查(迁移前必须完成)
- 全量扫描现有代码,标记所有依赖OctoberCMS核心封装的逻辑:包括
October\Rain\Database\Model基类、CMS组件、内置Twig扩展、后台RBAC权限封装等,这些是和原生Laravel不兼容的核心改造点 - 拆分数据库表:把OctoberCMS自带的系统表(
system_*、cms_*、backend_*前缀表)和你的业务自定义表做隔离,优先保证业务数据在迁移过程中无变更 - 梳理全量核心功能测试用例,包含前端页面、API接口、后台操作三类,每完成一个模块的迁移就跑一次用例,避免功能回退
方案选择落地
你提到的两种方案中,优先选增量模块迁移的方案,风险最低,对用户无感知,落地步骤如下:
- 初始化空Laravel 8项目,配置和现有OctoberCMS完全一致的数据库、缓存、会话、文件存储驱动,保证两个项目可以共享登录态、业务数据
- 用Nginx反向代理做流量分流:指定路径的请求转发到新Laravel项目,其余所有请求仍然走老OctoberCMS,用户侧完全感知不到系统切换
- 按业务优先级迁移模块:优先迁移改动频率高、逻辑独立的模块(比如C端用户功能、业务订单模块),最后迁移后台管理、内容发布等低频模块;每迁完一个模块就把对应路径的流量切到新系统,灰度验证3~7天无问题再推进下一个模块的迁移
- 复用可兼容代码:OctoberCMS的Model基类本身是对Laravel Eloquent的封装,90%以上的查询方法和原生Laravel兼容,可以先把业务Model的继承类从
October\Rain\Database\Model改成Illuminate\Database\Eloquent\Model,少数扩展特性(比如附件关联$attachOne/$attachMany)可以临时写个Trait在Laravel侧兼容,不用重写原有业务逻辑
高频避坑点
- OctoberCMS的文件上传数据统一存在
system_files表,原生Laravel没有对应实现,迁移时要么自己实现一套相同的文件读写逻辑,要么提前批量把附件路径改成Laravel默认存储结构,同步更新业务表的关联字段 - OctoberCMS自带后台RBAC权限体系,Laravel 8无内置对应实现,可以直接把原有权限相关的表结构导入新系统,写个中间件兼容原有权限判断逻辑,不需要重新配置权限规则
- 迁移过程中不要追求一步到位替换所有October特性,优先保证业务功能可用,所有模块迁移完成后再逐步重构代码,用Laravel原生特性替换临时兼容逻辑
内容的提问来源于stack exchange,提问作者Obay Hamed
相关产品推荐
相关产品推荐

