Flash、MariaDB、Python应用如何从Digital Ocean迁移至Heroku
Digital Ocean 向 Heroku 迁移实操流程(适配Flask + MariaDB + Python技术栈应用)
迁移前准备
- 对齐本地代码与Digital Ocean线上运行版本的一致性,拉取最新的线上代码分支作为迁移改造的基础版本,避免后续出现版本偏差
- 梳理原应用所有硬编码配置项,全部调整为通过环境变量读取,包括数据库连接串、接口密钥、资源路径等内容
- 安装Heroku CLI工具,完成账号权限关联
应用层适配改造
- 在项目根目录补全Heroku运行必需的配置文件:
- 新建
Procfile文件,写入Web进程启动指令:web: gunicorn 你的应用入口模块:app,替换为实际的Flask应用实例路径即可,比如入口文件为app.py时,指令写为web: gunicorn app:app - 新建
runtime.txt文件,写入与线上版本完全一致的Python版本号,格式参考python-3.11.9,严格匹配版本避免依赖兼容问题 - 从原Digital Ocean服务器导出线上运行的精确Python依赖列表,生成带固定版本号的
requirements.txt文件,剔除冗余、版本范围模糊的依赖
- 新建
- 移除原环境下依赖本地磁盘持久化的存储逻辑:Heroku的dyno文件系统为临时存储,实例重启后本地写入的文件会全部清除,所有用户上传类文件要提前对接对象存储服务,不要做本地落盘
- 配置Whitenoise静态资源托管中间件,直接在Flask应用内完成CSS、JS、前端静态资源(含Flash格式静态文件)的返回逻辑,无需额外配置外部静态服务
MariaDB 数据库迁移
- 在原Digital Ocean的MariaDB服务上执行全量业务库导出,使用
mysqldump命令排除系统库、临时表后生成SQL格式备份文件,导出完成后校验文件完整性,避免导出中断造成数据缺失 - 在Heroku应用上添加兼容MariaDB通信协议的数据库插件,创建与原库编码、排序规则完全一致的空业务库,记录插件分配的完整数据库连接串
- 修改Flask应用的数据库读取逻辑,改为从环境变量获取数据库连接串,不硬编码新库的访问地址
- 将导出的全量SQL备份导入Heroku端的新数据库实例,导入完成后做一致性校验:核对所有表的总记录数、核心业务表的抽样内容、自增序列的偏移值,杜绝导入丢数问题
- 调整数据库连接池参数,匹配Heroku dyno的并发特性,规避连接超时、连接数耗尽的异常
部署联调
- 通过Heroku CLI创建对应应用,关联本地项目代码仓库
- 将适配完成的代码推送到Heroku关联的远程仓库,触发自动构建流程
- 在Heroku应用的配置页面,补全所有原Digital Ocean环境下的环境变量,包括Flask会话密钥、第三方服务访问凭证、数据库连接地址等
- 构建完成后访问Heroku分配的临时域名,逐一验证核心业务链路:用户登录、数据读写、静态资源加载、上传文件回调等环节的运行状态
- 匹配当前业务流量规模,调整初始dyno的资源规格
切流与原服务下线
- 为原Digital Ocean上的应用配置全局维护提示页,暂停新的用户写入操作
- 重新执行一次增量数据库备份,将原库停服阶段产生的最后一部分增量数据同步到Heroku端的数据库实例
- 将自定义域名的DNS解析指向Heroku应用域名,配置好全链路SSL证书,等待全球DNS解析生效
- 持续观察Heroku应用的运行指标,包括错误率、接口响应时长、dyno负载水平,稳定运行72小时后,下线原Digital Ocean的服务器实例
- 开启Heroku弹性扩展规则,根据业务流量的时段特征设置dyno的自动伸缩阈值,实现按需扩缩容
内容的提问来源于stack exchange,提问作者Aryan-Jain
相关产品推荐
相关产品推荐

